diff --git a/captaincore.php b/captaincore.php index e183301..01071f0 100755 --- a/captaincore.php +++ b/captaincore.php @@ -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']; @@ -1422,6 +1448,22 @@ function captaincore_register_rest_endpoints() { ] ); + register_rest_route( + 'captaincore/v1', '/sites/(?P[\d]+)/(?P[a-zA-Z0-9-]+)/logs', [ + 'methods' => 'GET', + 'callback' => 'captaincore_site_logs_list_func', + 'show_in_index' => false + ] + ); + + register_rest_route( + 'captaincore/v1', '/sites/(?P[\d]+)/(?P[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[\d]+)/mailgun/setup', [ 'methods' => 'GET', diff --git a/templates/core.php b/templates/core.php index 8f0ee93..08319ec 100644 --- a/templates/core.php +++ b/templates/core.php @@ -33,6 +33,8 @@ + +
@@ -2592,6 +2594,19 @@ class="mt-5"
+ + + + mdi-close + Server logs for {{ dialog_site.environment_selected.home_url }} + + + + +
+
+
+
@@ -2655,6 +2670,15 @@ class="mt-5" mdi-image + + + Server Logs + error.log and access.log + + + mdi-text-box-multiple + + Multisite @@ -6923,6 +6947,8 @@ class="code" + + @@ -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