public function handle(StringizableInterface $event) { // URLにキーが含まれているため機密情報扱い $url = env('SLACK_INCOMING_WEBHOOK_URL'); $data = ['text' => (string) $event, 'username' => 'Hubサイト経由', 'channel' => '@hirokws', 'icon_emoji' => ':heavy_check_mark:']; $this->poster->post($url, $data); }
/** * 受け取ったイベントをTrelloのリストにログする * * @param MonitorableInterface $event * @return void */ public function handle(MonitorBaseEvent $event) { // サイト状態リスト上のカードを取得 $url = 'https://trello.com/1/lists/' . env('TRELLO_SITES_STATUS_LIST') . '/cards' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN'); if (false === ($result = $this->getter->get($url))) { \Log::notice('TrelloからWebサイト監視リストの情報が取得できませんでした。'); return; } $cards = $this->converter->convert($result); foreach ($cards as $card) { if ($card['name'] === $event->url) { $updateCard = $card; break; } } if (isset($updateCard)) { // 既存ラベル色取得、緑と赤は削除 $labels = array_diff(array_column($updateCard['labels'], 'color'), ['green', 'red']); $labelString = implode(',', $labels); // 既存カード更新 if ($event instanceof SiteUpped) { // サイト復活時 // ラベル色緑設定 $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/labels' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . trim($labelString . ',green', ','); $result = $this->putter->put($url); // 説明文からダウン時間情報削除 $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode(trim(preg_replace('/<.+より停止中 >/u', '', $updateCard['desc']))); $result = $this->putter->put($url); } else { // サイトダウン時 // ラベル色赤設定 $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/labels' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . trim($labelString . ',red', ','); $result = $this->putter->put($url); // 説明文にダウン時間情報追加 $url = 'https://trello.com/1/cards/' . $updateCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode('< ' . $event->time->toDateTimeString() . " より停止中 >\n" . $updateCard['desc']); $result = $this->putter->put($url); } } else { // 新規カード追加 $url = 'https://trello.com/1/cards/' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&idList=' . env('TRELLO_SITES_STATUS_LIST') . '&name=' . urlencode($event->url) . '&labels=' . ($event instanceof SiteUpped ? 'green' : 'red'); $newCard = $this->converter->convert($this->poster->post($url)); if ($event instanceof SiteDowned) { // 説明文のダウン時間情報更新 $url = 'https://trello.com/1/cards/' . $newCard['id'] . '/desc' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . urlencode('< ' . $event->time->toDateTimeString() . " より停止中 >\n"); $result = $this->putter->put($url); } } }
/** * タスクにリマインダーを設定する * * @param array $task 1タスクを表す配列 * @param Carbon $date リマインダー設定日時 */ private function createReminder($task, Carbon $date) { $newReminder['task_id'] = $task['id']; $newReminder['date'] = $date->toIso8601String(); $url = 'a.wunderlist.com/api/v1/reminders'; $this->poster->post($url, $newReminder, $this->tokens); }
/** * 受け取ったイベントの内容を実行する * * @param MonitorableInterface $event * @return void */ public function handle(CardTaskKicked $event) { // 実行中リストへ移動 $url = 'https://trello.com/1/cards/' . $event->id . '/idList' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . env('TRELLO_BATCH_EXECUTING_LIST'); $updatedCard = $this->putter->put($url); // コマンド実行、実行コード(通常正常時0)が返ってくる $result = $this->executor->execute($event->task); // エラーの場合のみ、コメントとして実行結果を追加 if ($result !== 0) { // メッセージをログしておく \Log::alert($this->executor->getMessage()); // コメント長の制限は1から16384だが、文字数かバイト数か不明 // そのためコメント長は未チェック $url = 'https://trello.com/1/cards/' . $event->id . '/actions/comments' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&text=' . urlencode($this->executor->getMessage()); $updatedCard = $this->poster->post($url); } // 実行を終えたので、待機リストへ移動 $url = 'https://trello.com/1/cards/' . $event->id . '/idList' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&value=' . env('TRELLO_BATCH_WAIT_STACK_LIST'); $updatedCard = $this->putter->put($url); }
/** * 受け取ったイベントをTrelloのリストにログする * * @param HubConnectionBaseEvent $event */ public function handle(HubConnectionBaseEvent $event) { $url = 'https://trello.com/1/cards/' . '?key=' . env('TRELLO_KEY') . '&token=' . env('TRELLO_TOKEN') . '&idList=' . env('TRELLO_LOG_LIST_ID') . '&name=' . urlencode($event); // 生成したカード情報がJSONで返ってくるが、今回は使用しない $this->poster->post($url); }