2014-05-01 24 views
1

我在使用「列表」部件來顯示一個字符串和一個值(在這種情況下,用戶的名稱和批處理系統上運行的作業數量)。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 用戶2 987 user8,800 user6,400 USER5,200 USER4,122 用戶1,89 用戶3,2

,或者,如果用戶沒有正在運行的工作,它們沒有列出這樣:

user6,340 USER5,123 USER4,101

它總是由第二列排序。

+0

更好地提供完整的小部件,以供參考樣本csv文件 –

回答

0

看起來像你的哈希順序變得「燒燬」排序[用戶]。

散列枚舉它們的值的順序是相應的鍵被插入。 http://www.ruby-doc.org/core-2.1.2/Hash.html

因此,「清空」這些值將無法解決這個問題。你可以添加一些排序到你的散列。但是,如果您信任CSV中的排序,並且使用新的哈希對象正確加載,爲什麼不重新初始化哈希每次運行?快速&簡單

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

我建議在重新填充它之前刪除小部件數據。就在你的腳本send_event之前,你可以加入這一行:

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

這會清除你正在使用的微件散列,而不發送更新到使用小部件的任何儀表盤。由於您立即重新填充它,小部件將從中獲取更新,然後將顯示新的(和新排序的)列表。

這不是優雅的,但它應該爲你工作。