如何保存和展示 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-1
、widget-id-2
、widget-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
不确定此处是否正确实施了所有内容,但它有效。
目前要设置一个 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-1
、widget-id-2
、widget-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
不确定此处是否正确实施了所有内容,但它有效。