2014-03-06 2 views
0
module.exports = (robot) -> 
    robot.respond /log (.*)/i, (msg) -> 
    group = "test" 
    incident_message = msg.match[0] 
    service_key = keys[group] 
    curtime = new Date().getTime() 
    incident_key = "hubot/#{curtime}" 
    reporter = msg.message.user.name 
    query = { 
     "service_key": service_key, 
     "incident_key": incident_key, 
     "event_type": "trigger", 
     "description": "Change Log #{reporter}", 
     "details": "#{incident_message}" 
    } 
    string_query = JSON.stringify(query) 
    content_length = string_query.length 
    msg 
     .http("https://events.pagerduty.com/generic/2010-04-15/create_event.json") 
     .headers 
     "Content-type": "application/json", 
     "Content-length": content_length 
     .post(string_query) (err, res, body) -> 
     result = JSON.parse(body) 
     if result.status == "success" 
     msg.send "Your log has been sent" 
     else 
     msg.send "There was an error sending your log." 
    msg 
     .http("https://xyz.pagerduty.com/api/v1/incidents/#{incident_key}/acknowledge") 

pagerduty에서 트리거 된 이벤트를 자동 확인하려고합니다. 첫 번째 http 요청이 적용됩니다. 그러나 두 번째 http 요청 (코드의 마지막 줄)은 적용되지 않습니다. 나는 varipus 조합을 시도했다. 그러나 도움이되지 않습니다. 나는 coffeescript를 처음 사용하고 hubot을 위해서만 사용합니다. 누구든지 나를 도울 수 있습니까?hubot coffescript에서 2 개의 https 요청을 동시에 호출

답변

2

먼저, 당신은 당신이 무엇을하고 있는지 HTTP 작업을 지정하지 :

msg.http("https://xyz.pagerduty.com/api/v1/incidents/#{incident_key}/acknowledge") 

.get() 또는 .post()로 끝나야합니다.

또한, 가능성으로 인해 나쁜 페이스트, 당신의 들여 쓰기가 중간에서 조금 떨어져있는 경우 :

.post(string_query) (err, res, body) -> 
    result = JSON.parse(body) 
    if result.status == "success" 
    msg.send "Your log has been sent" 
    else 
    msg.send "There was an error sending your log." 

가되어야한다

.post(string_query) (err, res, body) -> 
    result = JSON.parse(body) 
    if result.status == "success" 
     msg.send "Your log has been sent" 
    else 
     msg.send "There was an error sending your log." 

또 다른 것은, 때문에 NodeJS의 특성으로 이러한 HTTP 호출은 비동기 적으로 이루어지며 첫 번째 호출이 완료되기 전에 두 번째 호출이 완료 될 수있는 좋은 기회가 있습니다. 이를 방지하기 위해, 첫 번째의 콜백에서 두 번째 요청을 실행

msg 
    .http("https://events.pagerduty.com/generic/2010-04-15/create_event.json") 
    .headers 
    "Content-type": "application/json", 
    "Content-length": content_length 
    .post(string_query) (err, res, body) -> 
    result = JSON.parse(body) 
    if result.status == "success" 
     msg.send "Your log has been sent" 
     msg 
     .http("https://xyz.pagerduty.com/api/v1/incidents/#{incident_key}/acknowledge") 
     .get() 
    else 
     msg.send "There was an error sending your log." 

당신은 Hubot의 HTTP 요청과 다른 스크립트 트릭 here의 예를 찾을 수 있습니다.