2014-10-13 3 views
0

안녕하십니까. 현재 대시 보드를 올바르게 작동 시키려하고 있습니다. 목록 위젯에서 읽을 수있는 값을 얻을 수있는 방법을 찾지 못했습니다.두 개의 다른 CSV를 읽는 중 깜박임

begin 
    id = 1 
    names.each do |item| 
     label = names[id][0] #names = names.csv path 
     value = host_status[id]['status'] #host_status = host_status.csv path 
     items = { label: label, value: value } 
     id += 1 
    end 
    rescue  
    end 

    send_event('hosts', { items: items }) 

그래서 어떻게해야이 스크립트는 무엇입니까 :

  • 이는 host_status 모두를 통해 (작업) status.cgi

  • 으로 반복에서 얻는 값으로 host_status.csv 쓰기 .csv 및 names.csv 둘 다에서 값을 가져 오는 것

  • 출력은 다음과 같아야합니다 (레이블은 names.csv에서 나오고 host_statu의 값 s.csv) =>

    {라벨 : "localhost"를, 값 : "UP"}, {라벨 : "USV", 값 : "UP"}

목록 위젯은 같은 것을 필요 해시에있는 키 레이블과 값을 가진 배열은 내가 말할 수있는 한, 그러나 내 스크립트는 아무 것도 반환하지 않습니다. 해시를위한 푸시 메소드와 같은 것이 있나요?

+0

당신이 요구하고있는 특정 일을 분리하는 코드를 단축, 몇 사람이 전체를 볼 것이다 코드에는 관련없는 많은 것들이 포함되어 있기 때문에 – daremkd

+0

은 정말로 순차적 인 ID입니까? 그들은 영원히 계속됩니까? 당신은 당신이 당신의 id 값을 얻는 곳에 관한 부분을 추가 할 수 있습니까? (또는 적어도 데이터가'names'와'host_status' 객체에서 어떻게 보이는지 보여 주라.) –

+0

내가 names.each에 넣었 기 때문에 나는 그것을 끝내기까지 반복해야한다. 헤더를 데이터 출력에 넣습니다. id 1에서 시작하고 구조가 끝나는 시작 블록을 사용하여 끝 이름에 도달하면 구조를 종료합니다 .csv는 다음과 같습니다 (displayname | name | host/service) host_status this (host_name | host_display_name | status | ..) thats each row –

답변

0

나는 이름이 배열

[['foo'], ['bar']]의 배열이라고 여기 있으리라 믿고있어 그 host_status 방금

names = [['foo'], ['bar']] 
host_status = [{'status' => 'foo'}, {'status' => 'bar'}] 
labels = names.map(&:first) # ['foo', 'bar'] 
values = host_status.map {|s| s['status'] } # ['foo', 'bar'] 

# zip zips together two arrays [['foo', 'foo'], ['bar', 'bar']] 
# inject iterates over the array and returns a new data structure 
items = labels.zip(values).inject([]) do |memo, (k,v)| 
    memo.push({label: k, value:v}) 
    memo 
end 

당신이해야 할 수 있어야 [{'status' => 'foo'}, {'status' => 'bar'}]

객체의 배열입니다 irb 세션에서 해당 코드 샘플을 실행할 수 있습니다.

Enumerable에서 #지도 : http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map

Enumerable에서 # 우편 : http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-zip

Enumerable에서 #의 분사 : http://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject

+0

죄송합니다. 루비에 새로운 것이 있습니다. 그 코드가 무엇인지 말하고 메신저가 잘못되었는지 말해 보도록하겠습니다. 라벨은 names.csv +의 배열이되고 이름이 지정된 기호가 삽입됩니다. host_status.csv에있는 배열의 배열이됩니다. 특히 'status'열입니다. items는 레이블과 값을 모두 보유하는 새로운 배열이됩니다. k + v는 각 레이블과 메모에 푸시 된 값의 해당 데이터입니다. 마지막 메모는 무엇을 의미합니까? –

+0

은 코드 예제에 몇 가지 설명을 추가했습니다. map은 블록을 취합니다. 목록의 항목에 대한 메소드를 호출 할 때 블록에 대한 짧은 손은'& block'이므로 처음에는 목록의 각 배열에서'first'를 호출합니다. '[0]'대신에 첫 번째 값을 얻는 것은 관용적 인 방법입니다.inject를 사용하면 메모 객체를 반환해야하므로 목록을 통해 다음 반복에서 메모 객체를 추가 할 수 있습니다. 배열에 삽입을 위해 전달되는 요소가 두 개이기 때문에 들어오는 요소를'k'와'v'로 분해하여 객체를 어셈블하고'memo' 배열에 넣을 수 있습니다. –

관련 문제