如何保存和展示 Dashing 的历史值?

How to save and display Dashing historical values?

目前要设置一个 graph 小部件,该作业应传递所有要显示的值:

  data = [
    { "x" => 1980, "y" => 1323 },
    { "x" => 1981, "y" => 53234 },
    { "x" => 1982, "y" => 2344 }
  ]

我只想从我的服务器读取当前(最新)值,但之前的值也应该显示。

看起来我可以 create a job, which will read the current value from the server, but remaining values to be read from the Redis (or sqlite database,但我更喜欢 Redis)。之后的当前值应该保存到数据库中。

我以前从未使用过 Ruby 和 Dashing,所以我的第一个问题是 - 这可能吗?如果我将使用 Redis,那么问题是如何存储数据,因为这是键值数据库。我可以将其保留为 widget-id-1widget-id-2widget-id-3 ... widget-id-N 等,但在这种情况下,我将不得不存储 N 值(例如widget-id=N)。或者,有什么更好的方法吗?

我得出以下解决方案:

require 'redis' # https://github.com/redis/redis-rb
redis_uri = URI.parse(ENV["REDISTOGO_URL"])
redis = Redis.new(:host => redis_uri.host, :port => redis_uri.port, :password => redis_uri.password)

if redis.exists('values_x') && redis.exists('values_y')
    values_x = redis.lrange('values_x', 0, 9) # get latest 10 records
    values_y = redis.lrange('values_y', 0, 9) # get latest 10 records
else
    values_x = []
    values_y = []
end

SCHEDULER.every '10s', :first_in => 0 do |job|
  rand_data = (Date.today-rand(10000)).strftime("%d-%b") # replace this line with the code to get your data
  rand_value = rand(50) # replace this line with the code to get your data
  values_x << rand_data
  values_y << rand_value

  redis.multi do # execute as a single transaction
    redis.lpush('values_x', rand_data)
    redis.lpush('values_y', rand_value)
    # feel free to add more datasets values here, if required
  end

  data = [
    {
      label: 'dataset-label',
      fillColor: 'rgba(220,220,220,0.5)',
      strokeColor: 'rgba(220,220,220,0.8)',
      highlightFill: 'rgba(220,220,220,0.75)',
      highlightStroke: 'rgba(220,220,220,1)',
      data: values_y.last(10) # display last 10 values only
     }
  ]
  options = { scaleFontColor: '#fff' }

  send_event('barchart', { labels: values_x.last(10), datasets: data, options: options })
end

不确定此处是否正确实施了所有内容,但它有效。