首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dashing lists小部件

Dashing lists小部件
EN

Stack Overflow用户
提问于 2014-05-01 20:48:45
回答 2查看 3.9K关注 0票数 1

我在case中使用了"lists“小部件来显示一个字符串和一个值(在本例中是用户名和批处理系统上运行的作业数)。

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

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

只要dashing启动,并第一次读取文件,这是正确的。但是,当它重新读取文件(该文件不断更新)时,它将保持原始顺序(与csv文件中的顺序无关)。

有什么建议吗?

完整的作业文件:

代码语言:javascript
复制
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

它总是按第二列排序。

EN

回答 2

Stack Overflow用户

发布于 2014-07-22 02:31:39

您的散列顺序似乎变成了按用户排序的“烧入”。

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

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

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-09-17 05:14:54

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

代码语言:javascript
复制
Sinatra::Application.settings.history.delete('batch_jobs')

这将擦除您正在使用的小部件散列,而不会向正在使用该小部件的任何仪表板发送更新。因为您立即重新填充它,所以小部件将从中获得更新,然后显示新的(和新排序的)列表。

它并不优雅,但它应该适用于您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23408008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档