diff --git a/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.module.ts b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.module.ts
new file mode 100644
index 000000000..1d9885d5f
--- /dev/null
+++ b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.module.ts
@@ -0,0 +1,26 @@
+import { NgModule } from '@angular/core'
+import { CommonModule } from '@angular/common'
+import { Routes, RouterModule } from '@angular/router'
+import { IonicModule } from '@ionic/angular'
+import { KernelLogsPage } from './kernel-logs.page'
+import { SharedPipesModule } from '@start9labs/shared'
+import { LogsPageModule } from 'src/app/components/logs/logs.module'
+
+const routes: Routes = [
+ {
+ path: '',
+ component: KernelLogsPage,
+ },
+]
+
+@NgModule({
+ imports: [
+ CommonModule,
+ IonicModule,
+ RouterModule.forChild(routes),
+ SharedPipesModule,
+ LogsPageModule,
+ ],
+ declarations: [KernelLogsPage],
+})
+export class KernelLogsPageModule {}
diff --git a/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.html b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.html
new file mode 100644
index 000000000..066729556
--- /dev/null
+++ b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Kernel Logs
+
+
+
+
+
+
diff --git a/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.scss b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.ts b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.ts
new file mode 100644
index 000000000..1dee55841
--- /dev/null
+++ b/frontend/projects/ui/src/app/pages/server-routes/kernel-logs/kernel-logs.page.ts
@@ -0,0 +1,30 @@
+import { Component } from '@angular/core'
+import { ApiService } from 'src/app/services/api/embassy-api.service'
+
+@Component({
+ selector: 'kernel-logs',
+ templateUrl: './kernel-logs.page.html',
+ styleUrls: ['./kernel-logs.page.scss'],
+})
+export class KernelLogsPage {
+ pkgId: string
+ loading = true
+ needInfinite = true
+ before: string
+
+ constructor(private readonly embassyApi: ApiService) {}
+
+ fetchFetchLogs() {
+ return async (params: {
+ before_flag?: boolean
+ limit?: number
+ cursor?: string
+ }) => {
+ return this.embassyApi.getKernelLogs({
+ before_flag: params.before_flag,
+ cursor: params.cursor,
+ limit: params.limit,
+ })
+ }
+ }
+}
diff --git a/frontend/projects/ui/src/app/pages/server-routes/server-logs/server-logs.page.html b/frontend/projects/ui/src/app/pages/server-routes/server-logs/server-logs.page.html
index 07b9c7217..5940ae11d 100644
--- a/frontend/projects/ui/src/app/pages/server-routes/server-logs/server-logs.page.html
+++ b/frontend/projects/ui/src/app/pages/server-routes/server-logs/server-logs.page.html
@@ -3,10 +3,10 @@
- Logs
+ OS Logs
-
\ No newline at end of file
+
diff --git a/frontend/projects/ui/src/app/pages/server-routes/server-routing.module.ts b/frontend/projects/ui/src/app/pages/server-routes/server-routing.module.ts
index d8519bdbd..918c312b2 100644
--- a/frontend/projects/ui/src/app/pages/server-routes/server-routing.module.ts
+++ b/frontend/projects/ui/src/app/pages/server-routes/server-routing.module.ts
@@ -27,6 +27,13 @@ const routes: Routes = [
m => m.ServerLogsPageModule,
),
},
+ {
+ path: 'kernel-logs',
+ loadChildren: () =>
+ import('./kernel-logs/kernel-logs.module').then(
+ m => m.KernelLogsPageModule,
+ ),
+ },
{
path: 'marketplaces',
loadChildren: () =>
diff --git a/frontend/projects/ui/src/app/pages/server-routes/server-show/server-show.page.ts b/frontend/projects/ui/src/app/pages/server-routes/server-show/server-show.page.ts
index 927755b44..8e074e28c 100644
--- a/frontend/projects/ui/src/app/pages/server-routes/server-show/server-show.page.ts
+++ b/frontend/projects/ui/src/app/pages/server-routes/server-show/server-show.page.ts
@@ -345,14 +345,25 @@ export class ServerShowPage {
disabled: of(false),
},
{
- title: 'Logs',
- description: 'Raw, unfiltered device logs',
+ title: 'OS Logs',
+ description: 'Raw, unfiltered operating system logs',
icon: 'newspaper-outline',
action: () =>
this.navCtrl.navigateForward(['logs'], { relativeTo: this.route }),
detail: true,
disabled: of(false),
},
+ {
+ title: 'Kernel Logs',
+ description: 'Diagnostic log stream for device drivers',
+ icon: 'receipt-outline',
+ action: () =>
+ this.navCtrl.navigateForward(['kernel-logs'], {
+ relativeTo: this.route,
+ }),
+ detail: true,
+ disabled: of(false),
+ },
],
Support: [
{
diff --git a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
index d07b54191..e24af70dc 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-api.service.ts
@@ -56,6 +56,10 @@ export abstract class ApiService
params: RR.GetServerLogsReq,
): Promise
+ abstract getKernelLogs(
+ params: RR.GetServerLogsReq,
+ ): Promise
+
abstract getServerMetrics(
params: RR.GetServerMetricsReq,
): Promise
diff --git a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
index f9650ae1b..2c5145314 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-live-api.service.ts
@@ -63,6 +63,12 @@ export class LiveApiService extends ApiService {
return this.http.rpcRequest({ method: 'server.logs', params })
}
+ async getKernelLogs(
+ params: RR.GetServerLogsReq,
+ ): Promise {
+ return this.http.rpcRequest({ method: 'server.kernel-logs', params })
+ }
+
async getServerMetrics(
params: RR.GetServerMetricsReq,
): Promise {
diff --git a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
index 1f29a630d..01b59d921 100644
--- a/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
+++ b/frontend/projects/ui/src/app/services/api/embassy-mock-api.service.ts
@@ -112,6 +112,28 @@ export class MockApiService extends ApiService {
}
}
+ async getKernelLogs(
+ params: RR.GetServerLogsReq,
+ ): Promise {
+ await pauseFor(2000)
+ let entries: Log[]
+ if (Math.random() < 0.2) {
+ entries = Mock.ServerLogs
+ } else {
+ const arrLength = params.limit
+ ? Math.ceil(params.limit / Mock.ServerLogs.length)
+ : 10
+ entries = new Array(arrLength)
+ .fill(Mock.ServerLogs)
+ .reduce((acc, val) => acc.concat(val), [])
+ }
+ return {
+ entries,
+ 'start-cursor': 'startCursor',
+ 'end-cursor': 'endCursor',
+ }
+ }
+
async getServerMetrics(
params: RR.GetServerMetricsReq,
): Promise {