show drone logs
This commit is contained in:
@@ -83,6 +83,97 @@ if (COCKPIT_ADMIN && !COCKPIT_API_REQUEST) {
|
||||
'build' => $build
|
||||
];
|
||||
},
|
||||
'fetchLogs' => function ($build) {
|
||||
$settings = $this->app->storage->findOne('drone/settings') ?? FALSE;
|
||||
|
||||
if (!$settings || !isset($settings['url'],
|
||||
$settings['owner'],
|
||||
$settings['project'],
|
||||
$settings['target'],
|
||||
$settings['token']) || !$settings['active']) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$url = trim($settings['url'], "/") . '/api/repos/' . $settings['owner'] . '/' . $settings['project'] . '/builds/'. $build;
|
||||
|
||||
$headers = [
|
||||
'Content-Type: application/json',
|
||||
'Accept: application/json',
|
||||
'Authorization: Bearer ' . $settings['token']
|
||||
];
|
||||
|
||||
$logstr = "";
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
$b = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$b = json_decode($b);
|
||||
|
||||
$colors = [
|
||||
'/\\033?\[(?:0;)?30m(.*?)\\033?\[0m/s' => '<span class="black">$1</span>',
|
||||
'/\\033?\[(?:0;)?31m(.*?)\\033?\[0m/s' => '<span class="red">$1</span>',
|
||||
'/\\033?\[(?:0;)?32m(.*?)\\033?\[0m/s' => '<span class="green">$1</span>',
|
||||
'/\\033?\[(?:0;)?33m(.*?)\\033?\[0m/s' => '<span class="brown">$1</span>',
|
||||
'/\\033?\[(?:0;)?34m(.*?)\\033?\[0m/s' => '<span class="blue">$1</span>',
|
||||
'/\\033?\[(?:0;)?35m(.*?)\\033?\[0m/s' => '<span class="purple">$1</span>',
|
||||
'/\\033?\[(?:0;)?36m(.*?)\\033?\[0m/s' => '<span class="cyan">$1</span>',
|
||||
'/\\033?\[(?:0;)?37m(.*?)\\033?\[0m/s' => '<span class="light-gray">$1</span>',
|
||||
|
||||
'/\\033?\[1;30m(.*?)\\033?\[0m/s' => '<span class="dark-gray">$1</span>',
|
||||
'/\\033?\[1;31m(.*?)\\033?\[0m/s' => '<span class="light-red">$1</span>',
|
||||
'/\\033?\[1;32m(.*?)\\033?\[0m/s' => '<span class="light-green">$1</span>',
|
||||
'/\\033?\[1;33m(.*?)\\033?\[0m/s' => '<span class="yellow">$1</span>',
|
||||
'/\\033?\[1;34m(.*?)\\033?\[0m/s' => '<span class="light-blue">$1</span>',
|
||||
'/\\033?\[1;35m(.*?)\\033?\[0m/s' => '<span class="light-purple">$1</span>',
|
||||
'/\\033?\[1;36m(.*?)\\033?\[0m/s' => '<span class="light-cyan">$1</span>',
|
||||
'/\\033?\[1;37m(.*?)\\033?\[0m/s' => '<span class="white">$1</span>',
|
||||
|
||||
'/\\033?\[0m/s' => '',
|
||||
];
|
||||
|
||||
foreach ($b->stages as $stage) {
|
||||
foreach ($stage->steps as $step) {
|
||||
|
||||
$logstr .= '<div class="stagename">Stage: '.$stage->name.'</div>';
|
||||
$logstr .= '<h2 class="'.$step->status.'">'.$step->name.'</h2><br>';
|
||||
|
||||
$step_url = $url . '/logs/' . $stage->number . '/' . $step->number;
|
||||
$ch = curl_init($step_url);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
||||
|
||||
$logs = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
$logs = json_decode($logs);
|
||||
|
||||
foreach ($logs as $l) {
|
||||
if (preg_match('/^\\+/', $l->out)) {
|
||||
$logstr .= '<h3>'.htmlspecialchars($l->out).'</h3>';
|
||||
} else {
|
||||
$logstr .= preg_replace(array_keys($colors), $colors, htmlspecialchars($l->out));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'out' => $logstr
|
||||
];
|
||||
},
|
||||
|
||||
|
||||
'createDeploy' => function ($fromBuild) {
|
||||
$settings = $this->app->storage->findOne('drone/settings');
|
||||
|
||||
Reference in New Issue
Block a user