added slack support
This commit is contained in:
parent
a6b8fd6228
commit
a1807b9ae9
212
atf.inc.php
212
atf.inc.php
|
@ -2,7 +2,6 @@
|
||||||
namespace taskman;
|
namespace taskman;
|
||||||
use Amp;
|
use Amp;
|
||||||
use ClickHouseDB;
|
use ClickHouseDB;
|
||||||
use Exception;
|
|
||||||
|
|
||||||
interface IATFDevicePool
|
interface IATFDevicePool
|
||||||
{
|
{
|
||||||
|
@ -259,7 +258,7 @@ class ATFSession
|
||||||
$version = taskman_prop('GAME_VERSION');
|
$version = taskman_prop('GAME_VERSION');
|
||||||
$rev_hash = taskman_prop('GAME_REVISION_HASH');
|
$rev_hash = taskman_prop('GAME_REVISION_HASH');
|
||||||
$msg = "version $version($rev_hash) size: $apk_sizeMb Mb ($apk_sizeB B)";
|
$msg = "version $version($rev_hash) size: $apk_sizeMb Mb ($apk_sizeB B)";
|
||||||
// atf_slack_post($msg, array('channel' => _atf_slack_chan_qa()));
|
atf_slack_post($msg, array('channel' => _atf_slack_chan_qa()));
|
||||||
|
|
||||||
$data['guid'] = $this->guid;
|
$data['guid'] = $this->guid;
|
||||||
$data['time'] = time();
|
$data['time'] = time();
|
||||||
|
@ -314,22 +313,22 @@ class ATFSession
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// function tryShareToQAChannel($msg_slack_id, $error)
|
function tryShareToQAChannel($msg_slack_id, $error)
|
||||||
// {
|
{
|
||||||
// if(!$this->share_with_qa_chan)
|
if(!$this->share_with_qa_chan)
|
||||||
// return;
|
return;
|
||||||
|
|
||||||
// //let's skip similar already shared errors
|
//let's skip similar already shared errors
|
||||||
// if($this->_calcSharedErrorSimilarity($error) > 80)
|
if($this->_calcSharedErrorSimilarity($error) > 80)
|
||||||
// return;
|
return;
|
||||||
|
|
||||||
// $this->shared_qa_errors[] = $error;
|
$this->shared_qa_errors[] = $error;
|
||||||
|
|
||||||
// //let's share an exception message to goh-qa channel
|
//let's share an exception message to goh-qa channel
|
||||||
// $resp = atf_slack_get_permalink($msg_slack_id);
|
$resp = atf_slack_get_permalink($msg_slack_id);
|
||||||
// if(isset($resp['permalink']))
|
if(isset($resp['permalink']))
|
||||||
// atf_slack_post($resp['permalink'], array('channel' => _atf_slack_chan_qa()));
|
atf_slack_post($resp['permalink'], array('channel' => _atf_slack_chan_qa()));
|
||||||
// }
|
}
|
||||||
|
|
||||||
function _calcSharedErrorSimilarity($error)
|
function _calcSharedErrorSimilarity($error)
|
||||||
{
|
{
|
||||||
|
@ -368,62 +367,62 @@ class ATFPlan
|
||||||
return "Testing plan '{$this->name}' devices:".sizeof($this->getDevices())."(n/a:".sizeof($this->session->ignored_devices).")";
|
return "Testing plan '{$this->name}' devices:".sizeof($this->getDevices())."(n/a:".sizeof($this->session->ignored_devices).")";
|
||||||
}
|
}
|
||||||
|
|
||||||
// function createSlackThread()
|
function createSlackThread()
|
||||||
// {
|
{
|
||||||
// for($i=0;$i<5;++$i)
|
for($i=0;$i<5;++$i)
|
||||||
// {
|
{
|
||||||
// $resp = atf_slack_post($this->getTitle());
|
$resp = atf_slack_post($this->getTitle());
|
||||||
// if(isset($resp['ok']))
|
if(isset($resp['ok']))
|
||||||
// {
|
{
|
||||||
// $this->slack_thread_ts = $resp['ts'];
|
$this->slack_thread_ts = $resp['ts'];
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
// sleep(1);
|
sleep(1);
|
||||||
// }
|
}
|
||||||
// throw new Exception("Could not create Slack thread");
|
throw new Exception("Could not create Slack thread");
|
||||||
// }
|
}
|
||||||
|
|
||||||
// function updateSlackThread()
|
function updateSlackThread()
|
||||||
// {
|
{
|
||||||
// $issues_summary = '';
|
$issues_summary = '';
|
||||||
// foreach($this->getProblemsHistogram() as $code => $count)
|
foreach($this->getProblemsHistogram() as $code => $count)
|
||||||
// {
|
{
|
||||||
// if($code == ATFTask::CODE_GONE)
|
if($code == ATFTask::CODE_GONE)
|
||||||
// $issues_summary .= " gones:$count";
|
$issues_summary .= " gones:$count";
|
||||||
// else if($code == ATFTask::CODE_NSTART)
|
else if($code == ATFTask::CODE_NSTART)
|
||||||
// $issues_summary .= " nstrts:$count";
|
$issues_summary .= " nstrts:$count";
|
||||||
// else if($code == ATFTask::CODE_STUCK)
|
else if($code == ATFTask::CODE_STUCK)
|
||||||
// $issues_summary .= " stucks:$count";
|
$issues_summary .= " stucks:$count";
|
||||||
// else if($code == ATFTask::CODE_HUNG)
|
else if($code == ATFTask::CODE_HUNG)
|
||||||
// $issues_summary .= " hungs:$count";
|
$issues_summary .= " hungs:$count";
|
||||||
// else if($code == ATFTask::CODE_EXCEPTION)
|
else if($code == ATFTask::CODE_EXCEPTION)
|
||||||
// $issues_summary .= " excepts:$count";
|
$issues_summary .= " excepts:$count";
|
||||||
// else if($code == ATFTask::CODE_WARN)
|
else if($code == ATFTask::CODE_WARN)
|
||||||
// $issues_summary .= " warns:$count";
|
$issues_summary .= " warns:$count";
|
||||||
// }
|
}
|
||||||
|
|
||||||
// $running_count = 0;
|
$running_count = 0;
|
||||||
// $over_count = 0;
|
$over_count = 0;
|
||||||
// $total_progress = 0;
|
$total_progress = 0;
|
||||||
|
|
||||||
// foreach($this->tasks as $task)
|
foreach($this->tasks as $task)
|
||||||
// {
|
{
|
||||||
// $total_progress += $task->getProgress();
|
$total_progress += $task->getProgress();
|
||||||
// if($task->isOver())
|
if($task->isOver())
|
||||||
// $over_count++;
|
$over_count++;
|
||||||
// if($task->device)
|
if($task->device)
|
||||||
// $running_count++;
|
$running_count++;
|
||||||
// }
|
}
|
||||||
// $progress_txt = ' tasks:' . ($running_count > 0 ? $running_count . '/' : '') . $over_count . '/' . sizeof($this->tasks) . ' (' . round($total_progress/sizeof($this->tasks)*100, 2) . '%)';
|
$progress_txt = ' tasks:' . ($running_count > 0 ? $running_count . '/' : '') . $over_count . '/' . sizeof($this->tasks) . ' (' . round($total_progress/sizeof($this->tasks)*100, 2) . '%)';
|
||||||
|
|
||||||
// atf_slack_update($this->slack_thread_ts,
|
atf_slack_update($this->slack_thread_ts,
|
||||||
// array(array(
|
array(array(
|
||||||
// "text" => $this->getTitle() . $issues_summary . $progress_txt,
|
"text" => $this->getTitle() . $issues_summary . $progress_txt,
|
||||||
// "color" => $this->_getThreadColor(),
|
"color" => $this->_getThreadColor(),
|
||||||
// "mrkdwn_in" => array("text")
|
"mrkdwn_in" => array("text")
|
||||||
// ))
|
))
|
||||||
// );
|
);
|
||||||
// }
|
}
|
||||||
|
|
||||||
function getProblemsHistogram()
|
function getProblemsHistogram()
|
||||||
{
|
{
|
||||||
|
@ -486,7 +485,7 @@ class ATFPlan
|
||||||
{
|
{
|
||||||
$this->session->ignored_devices[] = $device;
|
$this->session->ignored_devices[] = $device;
|
||||||
atf_log("Ignoring device *$device*: $reason");
|
atf_log("Ignoring device *$device*: $reason");
|
||||||
// atf_slack_post("Ignoring device *$device*: $reason", array('thread_ts' => $this->slack_thread_ts));
|
atf_slack_post("Ignoring device *$device*: $reason", array('thread_ts' => $this->slack_thread_ts));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDevices()
|
function getDevices()
|
||||||
|
@ -544,7 +543,7 @@ class ATFPlan
|
||||||
|
|
||||||
function runAsync(ATFApkInstaller $install, $sleep_time, $hung_threshold, $gone_threshold, $stuck_threshold)
|
function runAsync(ATFApkInstaller $install, $sleep_time, $hung_threshold, $gone_threshold, $stuck_threshold)
|
||||||
{
|
{
|
||||||
// $this->createSlackThread();
|
$this->createSlackThread();
|
||||||
|
|
||||||
$this->session->resetBogusDevices();
|
$this->session->resetBogusDevices();
|
||||||
|
|
||||||
|
@ -562,7 +561,7 @@ class ATFPlan
|
||||||
return Amp\call(function() use($task, $install, $sleep_time, $hung_threshold, $gone_threshold, $stuck_threshold) {
|
return Amp\call(function() use($task, $install, $sleep_time, $hung_threshold, $gone_threshold, $stuck_threshold) {
|
||||||
while(!$this->isOver() && !$task->isOver())
|
while(!$this->isOver() && !$task->isOver())
|
||||||
{
|
{
|
||||||
// $this->updateSlackThread();
|
$this->updateSlackThread();
|
||||||
|
|
||||||
yield Amp\delay((int)$sleep_time*1000);
|
yield Amp\delay((int)$sleep_time*1000);
|
||||||
|
|
||||||
|
@ -596,7 +595,7 @@ class ATFPlan
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// $this->updateSlackThread();
|
$this->updateSlackThread();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,7 +611,7 @@ class ATFPlan
|
||||||
$task->device = $device;
|
$task->device = $device;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// atf_slack_post("Preparing *{$task->device}*", array('thread_ts' => $this->slack_thread_ts));
|
atf_slack_post("Preparing *{$task->device}*", array('thread_ts' => $this->slack_thread_ts));
|
||||||
|
|
||||||
yield $install->installAsync($device);
|
yield $install->installAsync($device);
|
||||||
yield atf_start_ext_cmd_on_device_async($device, $task->getCmd(), $task->getCmdArgs());
|
yield atf_start_ext_cmd_on_device_async($device, $task->getCmd(), $task->getCmdArgs());
|
||||||
|
@ -634,20 +633,20 @@ class ATFPlan
|
||||||
{
|
{
|
||||||
return Amp\call(function() use($task) {
|
return Amp\call(function() use($task) {
|
||||||
|
|
||||||
// $this->_postScreenToSlack($task);
|
$this->_postScreenToSlack($task);
|
||||||
|
|
||||||
$fatal_msg = "Fatal problem ({$task->last_fatal_problem} - ".ATFTask::code2string($task->last_fatal_problem)."), attempt:{$task->attempts} *{$task->device}*";
|
$fatal_msg = "Fatal problem ({$task->last_fatal_problem} - ".ATFTask::code2string($task->last_fatal_problem)."), attempt:{$task->attempts} *{$task->device}*";
|
||||||
|
|
||||||
atf_log("[FTL] $fatal_msg");
|
atf_log("[FTL] $fatal_msg");
|
||||||
|
|
||||||
// atf_slack_post($fatal_msg, array('thread_ts' => $task->slack_thread_ts));
|
atf_slack_post($fatal_msg, array('thread_ts' => $task->slack_thread_ts));
|
||||||
|
|
||||||
if($task->last_fatal_problem == ATFTask::CODE_GONE ||
|
if($task->last_fatal_problem == ATFTask::CODE_GONE ||
|
||||||
$task->last_fatal_problem == ATFTask::CODE_HUNG)
|
$task->last_fatal_problem == ATFTask::CODE_HUNG)
|
||||||
{
|
{
|
||||||
$app_log = atf_get_logcat_unity($task->device, 300);
|
$app_log = atf_get_logcat_unity($task->device, 300);
|
||||||
$app_log = _atf_trim_start($app_log, 2000);
|
$app_log = _atf_trim_start($app_log, 2000);
|
||||||
// atf_slack_post("Last logs: ```$app_log``` *{$task->device}*", array('thread_ts' => $task->slack_thread_ts));
|
atf_slack_post("Last logs: ```$app_log``` *{$task->device}*", array('thread_ts' => $task->slack_thread_ts));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!taskman_prop('EXT_BOT_ERROR_PAUSE'))
|
if (!taskman_prop('EXT_BOT_ERROR_PAUSE'))
|
||||||
|
@ -787,7 +786,7 @@ class ATFPlan
|
||||||
|
|
||||||
if($device_is_bogus)
|
if($device_is_bogus)
|
||||||
{
|
{
|
||||||
// $this->_reportErrorFromLogcatToSlack($task, 1000);
|
$this->_reportErrorFromLogcatToSlack($task, 1000);
|
||||||
$this->_incAndCheckBogusDevice($task->device);
|
$this->_incAndCheckBogusDevice($task->device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -827,21 +826,21 @@ class ATFPlan
|
||||||
atf_log($shell_msg);
|
atf_log($shell_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// function _postToSlackExtStatusItem(ATFTask $task, array $item)
|
function _postToSlackExtStatusItem(ATFTask $task, array $item)
|
||||||
// {
|
{
|
||||||
// $orig_msg = _atf_trim($item['message'], 3000);
|
$orig_msg = _atf_trim($item['message'], 3000);
|
||||||
// $slack_msg = $orig_msg;
|
$slack_msg = $orig_msg;
|
||||||
|
|
||||||
// if($item['error'] == ATFTask::CODE_EXCEPTION)
|
if($item['error'] == ATFTask::CODE_EXCEPTION)
|
||||||
// $slack_msg = "```$slack_msg```";
|
$slack_msg = "```$slack_msg```";
|
||||||
|
|
||||||
// $slack_msg = '('.round($item['time'],1).'s) '.$slack_msg.' *'.$task->device.'*';
|
$slack_msg = '('.round($item['time'],1).'s) '.$slack_msg.' *'.$task->device.'*';
|
||||||
|
|
||||||
// $resp = atf_slack_post($slack_msg, array('thread_ts' => $task->slack_thread_ts));
|
$resp = atf_slack_post($slack_msg, array('thread_ts' => $task->slack_thread_ts));
|
||||||
|
|
||||||
// if(isset($resp['ok']) && $item['error'] == ATFTask::CODE_EXCEPTION)
|
if(isset($resp['ok']) && $item['error'] == ATFTask::CODE_EXCEPTION)
|
||||||
// $this->session->tryShareToQAChannel($resp['ts'], $orig_msg);
|
$this->session->tryShareToQAChannel($resp['ts'], $orig_msg);
|
||||||
// }
|
}
|
||||||
|
|
||||||
function _analyzeExtStatusItemAsync(ATFTask $task, array $item)
|
function _analyzeExtStatusItemAsync(ATFTask $task, array $item)
|
||||||
{
|
{
|
||||||
|
@ -890,34 +889,34 @@ class ATFPlan
|
||||||
else if($msg_type === '[WRN]')
|
else if($msg_type === '[WRN]')
|
||||||
{
|
{
|
||||||
$task->addStatusCode(ATFTask::CODE_WARN);
|
$task->addStatusCode(ATFTask::CODE_WARN);
|
||||||
// $this->_postToSlackExtStatusItem($task, $item);
|
$this->_postToSlackExtStatusItem($task, $item);
|
||||||
}
|
}
|
||||||
else if($msg_type === null)
|
else if($msg_type === null)
|
||||||
{
|
{
|
||||||
// $this->_postToSlackExtStatusItem($task, $item);
|
$this->_postToSlackExtStatusItem($task, $item);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// function _reportErrorFromLogcatToSlack(ATFTask $task, $limit)
|
function _reportErrorFromLogcatToSlack(ATFTask $task, $limit)
|
||||||
// {
|
{
|
||||||
// $errors_log = _atf_trim(atf_get_logcat_errors($task->device, $limit), 3000);
|
$errors_log = _atf_trim(atf_get_logcat_errors($task->device, $limit), 3000);
|
||||||
// if($errors_log)
|
if($errors_log)
|
||||||
// atf_slack_post("```$errors_log``` *{$task->device}*", array('thread_ts' => $task->slack_thread_ts));
|
atf_slack_post("```$errors_log``` *{$task->device}*", array('thread_ts' => $task->slack_thread_ts));
|
||||||
// }
|
}
|
||||||
|
|
||||||
// function _postScreenToSlack(ATFTask $task)
|
function _postScreenToSlack(ATFTask $task)
|
||||||
// {
|
{
|
||||||
// global $GAME_ROOT;
|
global $GAME_ROOT;
|
||||||
|
|
||||||
// $png_data = atf_screen($task->device);
|
$png_data = atf_screen($task->device);
|
||||||
// if($png_data)
|
if($png_data)
|
||||||
// {
|
{
|
||||||
// ensure_write("$GAME_ROOT/build/atf/screen.png", $png_data);
|
ensure_write("$GAME_ROOT/build/atf/screen.png", $png_data);
|
||||||
// atf_slack_post_png("screen", "$GAME_ROOT/build/atf/screen.png", array('thread_ts' => $task->slack_thread_ts));
|
atf_slack_post_png("screen", "$GAME_ROOT/build/atf/screen.png", array('thread_ts' => $task->slack_thread_ts));
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1309,10 +1308,11 @@ function _atf_db()
|
||||||
return $db;
|
return $db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function atf_stats_send($table, array $data)
|
function atf_stats_send($table, array $data)
|
||||||
{
|
{
|
||||||
$db = _atf_db();
|
|
||||||
return;
|
return;
|
||||||
|
$db = _atf_db();
|
||||||
$db->insert($table, array(array_values($data)), array_keys($data));
|
$db->insert($table, array(array_values($data)), array_keys($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
"php": ">=7.4"
|
"php": ">=7.4"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": ["atf.inc.php"]
|
"classmap": ["atf.inc.php"],
|
||||||
|
"classmap": ["slack.inc.php"]
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,180 @@
|
||||||
|
<?php
|
||||||
|
namespace taskman;
|
||||||
|
use Amp;
|
||||||
|
use Exception;
|
||||||
|
use CURLFile;
|
||||||
|
|
||||||
|
function slack_msg($token, $channel, $msg, $fields = [])
|
||||||
|
{
|
||||||
|
$ch = curl_init("https://slack.com/api/chat.postMessage");
|
||||||
|
|
||||||
|
$fields["token"] = $token;
|
||||||
|
if(!isset($fields['channel']))
|
||||||
|
$fields["channel"] = $channel;
|
||||||
|
$fields["text"] = $msg;
|
||||||
|
$fields["as_user"] = "bitgames bot";
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||||
|
//curl_setopt($ch, CURLOPT_VERBOSE, true);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function slack_upload_image($token, array $channels, $filepath)
|
||||||
|
{
|
||||||
|
$url = "https://slack.com/api/files.upload";
|
||||||
|
|
||||||
|
$cfile = new CURLFile(realpath($filepath), 'image/jpg', 'test.jpg');
|
||||||
|
$fields = array(
|
||||||
|
'token' => $token,
|
||||||
|
'channels' => implode(",", $channels),
|
||||||
|
'file' => $cfile,
|
||||||
|
'filename' => "test.jpg",
|
||||||
|
);
|
||||||
|
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, true);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
||||||
|
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
$arr = json_decode($result, true);
|
||||||
|
if(isset($arr['ok']) && $arr['ok'] == 1)
|
||||||
|
{
|
||||||
|
if(isset($arr['file']['permalink_public']))
|
||||||
|
return $arr['file']['permalink_public'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function _atf_slack_chan()
|
||||||
|
{
|
||||||
|
return get("ATF_SLACK_CHANNEL");
|
||||||
|
}
|
||||||
|
|
||||||
|
function _atf_slack_chan_qa()
|
||||||
|
{
|
||||||
|
return get("ATF_SLACK_CHANNEL");
|
||||||
|
}
|
||||||
|
|
||||||
|
function _atf_slack_token()
|
||||||
|
{
|
||||||
|
$token = "xoxb-141599046048-1567053090644-2gDAoWGiZxFTtXGLMOOeLG2u";
|
||||||
|
return $token;
|
||||||
|
}
|
||||||
|
|
||||||
|
task('slack_test', function()
|
||||||
|
{
|
||||||
|
// createSlackThread();
|
||||||
|
// atf_slack_post('hi', array('channel' => _atf_slack_chan_qa()));
|
||||||
|
});
|
||||||
|
|
||||||
|
function atf_slack_post($message, $fields = array())
|
||||||
|
{
|
||||||
|
if(!get("ATF_SLACK"))
|
||||||
|
return array('ok' => true, 'ts' => 0);
|
||||||
|
|
||||||
|
$ch = curl_init("https://slack.com/api/chat.postMessage");
|
||||||
|
$fields["token"] = _atf_slack_token();
|
||||||
|
if(!isset($fields['channel']))
|
||||||
|
$fields["channel"] = _atf_slack_chan();
|
||||||
|
$fields["text"] = $message;
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function atf_slack_get_permalink($message_ts, $channel = null)
|
||||||
|
{
|
||||||
|
if(!get("ATF_SLACK"))
|
||||||
|
return array('permalink' => '');
|
||||||
|
|
||||||
|
$ch = curl_init("https://slack.com/api/chat.getPermalink");
|
||||||
|
$fields["token"] = _atf_slack_token();
|
||||||
|
if($channel === null)
|
||||||
|
$channel = _atf_slack_chan();
|
||||||
|
$fields["channel"] = $channel;
|
||||||
|
$fields["message_ts"] = $message_ts;
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
function atf_slack_update($ts, array $attachments)
|
||||||
|
{
|
||||||
|
if(!get("ATF_SLACK"))
|
||||||
|
return array('ok' => true);
|
||||||
|
|
||||||
|
$ch = curl_init("https://slack.com/api/chat.update");
|
||||||
|
$fields["token"] = _atf_slack_token();
|
||||||
|
$fields["channel"] = _atf_slack_chan();
|
||||||
|
$fields["ts"] = $ts;
|
||||||
|
$fields["attachments"] = json_encode($attachments);
|
||||||
|
|
||||||
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function atf_slack_post_png($title, $png_file, $fields = array())
|
||||||
|
{
|
||||||
|
if(!get("ATF_SLACK"))
|
||||||
|
return array('ok' => true);
|
||||||
|
|
||||||
|
$file = new CurlFile($png_file, 'image/png');
|
||||||
|
|
||||||
|
$header = array();
|
||||||
|
$header[] = 'Content-Type: multipart/form-data';
|
||||||
|
|
||||||
|
$fields["token"] = _atf_slack_token();
|
||||||
|
$fields["channels"] = _atf_slack_chan();
|
||||||
|
$fields['file'] = $file;
|
||||||
|
$fields['title'] = $title;
|
||||||
|
|
||||||
|
$ch = curl_init("https://slack.com/api/files.upload");
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
|
||||||
|
|
||||||
|
$result = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
return json_decode($result, true);
|
||||||
|
}
|
Loading…
Reference in New Issue