Dashing - 列出小部件

时间:2014-05-01 12:48:45

标签: dashing

我正在使用“列表”小部件来显示字符串和值(在这种情况下是用户名和批处理系统上运行的作业数)。

我希望这个显示按值(作业数)按降序排序。它目前从包含字符串(用户名)和值(作业数)的csv文件中读取这些内容,按降序排序。

CSV.foreach('/path/to/file.csv') do |row|
    user = row[0]
    numberOfJobs = row[1]
    SGE_list[user] =  { label: user, value: numberOfJobs }
end

一旦启动,并且第一次读取文件,这是正确的。但是,当它重新读取文件(不断更新)时,它会保留原始顺序,(不管csv文件中的顺序如何)。

有什么建议吗?

完整职位档案:

require 'csv'

JOB_list = Hash.new({ value: 0 })

SCHEDULER.every '5m' do

  groups = ["user1", "user2", "user3", "user4", "user5", "user6", "user7", "user8"]

  # Read in to get order                                                        
  CSV.foreach('/opt/dashing/sweet_dashboard_project/jobs/qusage.csv') do |row|
    user = row[0]
    numberOfJobs = row[1]
    JOB_list[user] =  { label: user, value: numberOfJobs }
  end

  # blank all values                                                            
  for g in groups
    JOB_list[g] =  { label: g, value: 0 }
  end

  CSV.foreach('/opt/dashing/sweet_dashboard_project/jobs/qusage.csv') do |row|
    user = row[0]
    numberOfJobs = row[1]
    JOB_list[user] =  { label: user, value: numberOfJobs }
  end

  send_event('batch_jobs', { items: JOB_list.values })

end

csv文件可能有所不同。它可能是: user7,1000 user2,987 user8,800 user6,400 user5,200 user4,122 user1,89 user3,2

或者,如果用户没有运行作业,则不会列出:

user6,340 user5,123 user4,101

始终按第二列排序。

2 个答案:

答案 0 :(得分:0)

好像你的哈希顺序变成"烧掉"按[用户]排序。

哈希按照插入相应键的顺序枚举其值。 http://www.ruby-doc.org/core-2.1.2/Hash.html

因此"清空"价值不会解决这个问题。您可以在哈希中添加一些排序。但是,如果您信任CSV中的排序,并且使用新的Hash对象正确加载,为什么不在每次运行时重新初始化Hash?快速&易

require 'csv'


SCHEDULER.every '5m' do

  JOB_list = Hash.new

  # Trust the CSV file to sort by row[1], a.k.a. NumberOfJobs                                                        
  CSV.foreach('/opt/dashing/sweet_dashboard_project/jobs/qusage.csv') do |row|
    user = row[0]
    numberOfJobs = row[1]
    JOB_list[user] =  { label: user, value: numberOfJobs }
  end

  send_event('batch_jobs', { items: JOB_list.values })

end

答案 1 :(得分:0)

我建议在重新填充之前删除小部件数据。就在脚本中的send_event之前,您可以添加以下行:

Sinatra::Application.settings.history.delete('batch_jobs')

这将删除您正在使用的窗口小部件哈希,而不会向使用该窗口小部件的任何仪表板发送更新。由于您立即重新填充它,窗口小部件将从中获取更新,然后将显示新的(和新排序的)列表。

它并不优雅,但它应该适合你。