Skip to content

Commit

Permalink
馃摝 NEW: Server logs viewer
Browse files Browse the repository at this point in the history
  • Loading branch information
austinginder committed May 7, 2024
1 parent f8d27af commit f04a979
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
42 changes: 42 additions & 0 deletions captaincore.php
Original file line number Diff line number Diff line change
Expand Up @@ -1243,6 +1243,32 @@ function captaincore_site_backups_get_func( $request ) {
return $site->backup_get( $backup_id, $environment );
}

function captaincore_site_logs_list_func( $request ) {
$site_id = $request['id'];

if ( ! captaincore_verify_permissions( $site_id ) ) {
return new WP_Error( 'token_invalid', 'Invalid Token', [ 'status' => 403 ] );
}

$environment = $request['environment'];
$site = ( new CaptainCore\Sites )->get( $site_id );
$response = CaptainCore\Run::CLI( "logs list {$site->site}-$environment" );
return json_decode( $response );
}

function captaincore_site_logs_fetch_func( $request ) {
$site_id = $request['id'];
$file = $request['file'];

if ( ! captaincore_verify_permissions( $site_id ) ) {
return new WP_Error( 'token_invalid', 'Invalid Token', [ 'status' => 403 ] );
}

$environment = $request['environment'];
$site = ( new CaptainCore\Sites )->get( $site_id );
return CaptainCore\Run::CLI( "logs get {$site->site}-$environment --file=\"$file\"" );
}

function captaincore_site_mailgun_func( $request ) {
$site_id = $request['id'];
$name = $request['name'];
Expand Down Expand Up @@ -1422,6 +1448,22 @@ function captaincore_register_rest_endpoints() {
]
);

register_rest_route(
'captaincore/v1', '/sites/(?P<id>[\d]+)/(?P<environment>[a-zA-Z0-9-]+)/logs', [
'methods' => 'GET',
'callback' => 'captaincore_site_logs_list_func',
'show_in_index' => false
]
);

register_rest_route(
'captaincore/v1', '/sites/(?P<id>[\d]+)/(?P<environment>[a-zA-Z0-9-]+)/logs/fetch', [
'methods' => 'GET',
'callback' => 'captaincore_site_logs_fetch_func',
'show_in_index' => false
]
);

register_rest_route(
'captaincore/v1', '/sites/(?P<id>[\d]+)/mailgun/setup', [
'methods' => 'GET',
Expand Down
53 changes: 53 additions & 0 deletions templates/core.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
<link href="https://cdn.jsdelivr.net/npm/frappe-charts@1.6.1/dist/frappe-charts.min.css" rel="stylesheet">
<?php } ?>
<link href="<?php echo $plugin_url; ?>public/css/captaincore-public-2023-11-16.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-twilight.min.css" rel="stylesheet" />
</head>
<body>
<div id="app" v-cloak>
Expand Down Expand Up @@ -2592,6 +2594,19 @@ class="mt-5"
</v-flex>
</v-layout>
</div>
<v-dialog v-model="dialog_site.environment_selected.view_server_logs" fullscreen scrollable>
<v-card flat tile>
<v-toolbar dark color="primary" class="shrink">
<v-btn icon @click="dialog_site.environment_selected.view_server_logs = false"><v-icon>mdi-close</v-icon></v-btn>
<v-toolbar-title>Server logs for {{ dialog_site.environment_selected.home_url }}</v-toolbar-title>
</v-toolbar>
<v-card-text class="mt-5 pb-5">
<v-progress-circular indeterminate color="primary" class="mx-16 mt-7 mb-7" size="24" v-if="typeof dialog_site.environment_selected.server_logs != 'undefined' && dialog_site.environment_selected.server_logs.files == ''"></v-progress-circular></span>
<v-select v-model="dialog_site.environment_selected.server_log_selected" :items="dialog_site.environment_selected.server_logs.files" item-text="name" item-value="path" label="Select log" v-if="typeof dialog_site.environment_selected.server_logs != 'undefined' && dialog_site.environment_selected.server_logs.files != ''" @change="fetchLogs()"></v-select>
<pre style="font-size: 13px;" class="overflow-auto"><code class="language-log" v-html="dialog_site.environment_selected.server_log_response"></code></pre>
</v-card-text>
</v-card>
</v-dialog>
<v-tabs-items v-model="dialog_site.site.tabs_management" v-if="dialog_site.loading != true">
<v-tab-item :key="1" value="tab-Info" :transition="false" :reverse-transition="false">
<v-toolbar dense light flat>
Expand Down Expand Up @@ -2655,6 +2670,15 @@ class="mt-5"
<v-icon>mdi-image</v-icon>
</v-list-item-icon>
</v-list-item>
<v-list-item @click="viewLogs( dialog_site.site.site_id )" dense>
<v-list-item-content>
<v-list-item-title>Server Logs</v-list-item-title>
<v-list-item-subtitle><code>error.log</code> and <code>access.log</code></v-list-item-subtitle>
</v-list-item-content>
<v-list-item-icon>
<v-icon>mdi-text-box-multiple</v-icon>
</v-list-item-icon>
</v-list-item>
<v-list-item @click="copyText( dialog_site.environment_selected.subsite_count + ' subsites')" dense v-if="dialog_site.environment_selected.subsite_count">
<v-list-item-content>
<v-list-item-title>Multisite</v-list-item-title>
Expand Down Expand Up @@ -6923,6 +6947,8 @@ class="code"
<script src="https://cdn.jsdelivr.net/npm/numeral@2.0.6/numeral.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/frappe-charts@1.6.1/dist/frappe-charts.min.umd.js"></script>
<?php } ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-log.min.js"></script>
<script src="<?php echo $plugin_url; ?>public/js/kjua.min.js"></script>
<script src="<?php echo $plugin_url; ?>public/js/moment.min.js"></script>
<script src="<?php echo $plugin_url; ?>public/js/core.js"></script>
Expand Down Expand Up @@ -10809,6 +10835,33 @@ class="code"

});
},
viewLogs(){
site = this.dialog_site.site
environment = this.dialog_site.environment_selected
environment.view_server_logs = true
axios.get(
`/wp-json/captaincore/v1/sites/${site.site_id}/${environment.environment.toLowerCase()}/logs`, {
headers: {'X-WP-Nonce':this.wp_nonce}
})
.then(response => {
environment.server_logs = response.data
});
},
fetchLogs() {
site = this.dialog_site.site
environment = this.dialog_site.environment_selected
environment.view_server_logs = true
axios.get(
`/wp-json/captaincore/v1/sites/${site.site_id}/${environment.environment.toLowerCase()}/logs/fetch?file=${environment.server_log_selected}`, {
headers: {'X-WP-Nonce':this.wp_nonce}
})
.then(response => {
window.Prism = window.Prism || {};
window.Prism.manual = true;
environment.server_log_response = Prism.highlight( response.data, Prism.languages.log, 'log')
Prism.highlightAll()
});
},
showCaptures( site_id ) {
this.dialog_captures.site = this.dialog_site.site
environment = this.dialog_site.environment_selected
Expand Down

0 comments on commit f04a979

Please sign in to comment.