adding device protocl and type to the. Adding class for parsing `smartctl --scan` json output, for device detection. added an example/test file for `smartctl -x -j` added a placeholder settings panel. moved dashboard & details compoonent out of "Admin" directory.
parent
98415e625d
commit
5101a37964
@ -0,0 +1,19 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
type Scan struct {
|
||||||
|
JSONFormatVersion []int `json:"json_format_version"`
|
||||||
|
Smartctl struct {
|
||||||
|
Version []int `json:"version"`
|
||||||
|
SvnRevision string `json:"svn_revision"`
|
||||||
|
PlatformInfo string `json:"platform_info"`
|
||||||
|
BuildInfo string `json:"build_info"`
|
||||||
|
Argv []string `json:"argv"`
|
||||||
|
ExitStatus int `json:"exit_status"`
|
||||||
|
} `json:"smartctl"`
|
||||||
|
Devices []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
InfoName string `json:"info_name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Protocol string `json:"protocol"`
|
||||||
|
} `json:"devices"`
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,82 @@
|
|||||||
|
<h2 mat-dialog-title>Scrutiny Settings</h2>
|
||||||
|
<mat-dialog-content class="mat-typography">
|
||||||
|
|
||||||
|
<form class="flex flex-col p-8 pb-0 overflow-hidden">
|
||||||
|
<div class="flex flex-col gt-xs:flex-row">
|
||||||
|
<mat-form-field class="flex-auto gt-xs:pr-3">
|
||||||
|
<mat-label>Sort By</mat-label>
|
||||||
|
<mat-select>
|
||||||
|
<mat-option value="option1">Status</mat-option>
|
||||||
|
<mat-option value="option2" disabled>Name</mat-option>
|
||||||
|
<mat-option value="option3" disabled>Label</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex">
|
||||||
|
<mat-tab-group mat-align-tabs="start">
|
||||||
|
<mat-tab label="Ata">
|
||||||
|
|
||||||
|
<div class="flex flex-col mt-5 gt-md:flex-row">
|
||||||
|
<mat-form-field class="flex-auto gt-md:pr-3">
|
||||||
|
<mat-label>Critical Error Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field class="flex-auto gt-md:pl-3">
|
||||||
|
<mat-label>Critical Warning Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flex flex-col gt-md:flex-row">
|
||||||
|
<mat-form-field class="flex-auto gt-md:pr-3">
|
||||||
|
<mat-label>Error Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field class="flex-auto gt-md:pl-3">
|
||||||
|
<mat-label>Warning Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="NVMe">
|
||||||
|
|
||||||
|
<div class="flex flex-col mt-5 gt-md:flex-row">
|
||||||
|
<mat-form-field class="flex-auto gt-md:pr-3">
|
||||||
|
<mat-label>Critical Error Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field class="flex-auto gt-md:pl-3">
|
||||||
|
<mat-label>Critical Warning Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="SCSI">
|
||||||
|
<div class="flex flex-col mt-5 gt-md:flex-row">
|
||||||
|
<mat-form-field class="flex-auto gt-md:pr-3">
|
||||||
|
<mat-label>Critical Error Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field class="flex-auto gt-md:pl-3">
|
||||||
|
<mat-label>Critical Warning Threshold</mat-label>
|
||||||
|
<input matInput>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
</mat-tab>
|
||||||
|
</mat-tab-group>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-button mat-dialog-close>Cancel</button>
|
||||||
|
<button mat-button [mat-dialog-close]="true" cdkFocusInitial>Save</button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Copyright 2020 Google LLC. All Rights Reserved.
|
||||||
|
Use of this source code is governed by an MIT-style license that
|
||||||
|
can be found in the LICENSE file at http://angular.io/license -->
|
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DashboardSettingsComponent } from './dashboard-settings.component';
|
||||||
|
|
||||||
|
describe('DashboardSettingsComponent', () => {
|
||||||
|
let component: DashboardSettingsComponent;
|
||||||
|
let fixture: ComponentFixture<DashboardSettingsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ DashboardSettingsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(DashboardSettingsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,17 @@
|
|||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-dashboard-settings',
|
||||||
|
templateUrl: './dashboard-settings.component.html',
|
||||||
|
styleUrls: ['./dashboard-settings.component.scss']
|
||||||
|
})
|
||||||
|
export class DashboardSettingsComponent implements OnInit {
|
||||||
|
|
||||||
|
constructor() { }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
}
|
||||||
|
formatLabel(value: number) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { Overlay } from '@angular/cdk/overlay';
|
||||||
|
import { MAT_AUTOCOMPLETE_SCROLL_STRATEGY, MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
|
import { MatIconModule } from '@angular/material/icon';
|
||||||
|
import { MatInputModule } from '@angular/material/input';
|
||||||
|
import { SharedModule } from 'app/shared/shared.module';
|
||||||
|
import {DashboardSettingsComponent} from 'app/layout/common/dashboard-settings/dashboard-settings.component'
|
||||||
|
import { MatDialogModule } from "@angular/material/dialog";
|
||||||
|
import { MatButtonToggleModule} from "@angular/material/button-toggle";
|
||||||
|
import {MatTabsModule} from "@angular/material/tabs";
|
||||||
|
import {MatSliderModule} from "@angular/material/slider";
|
||||||
|
import {MatSlideToggleModule} from "@angular/material/slide-toggle";
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [
|
||||||
|
DashboardSettingsComponent
|
||||||
|
],
|
||||||
|
imports : [
|
||||||
|
RouterModule.forChild([]),
|
||||||
|
MatAutocompleteModule,
|
||||||
|
MatDialogModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatSelectModule,
|
||||||
|
MatFormFieldModule,
|
||||||
|
MatIconModule,
|
||||||
|
MatInputModule,
|
||||||
|
MatButtonToggleModule,
|
||||||
|
MatTabsModule,
|
||||||
|
MatSliderModule,
|
||||||
|
MatSlideToggleModule,
|
||||||
|
SharedModule
|
||||||
|
],
|
||||||
|
exports : [
|
||||||
|
DashboardSettingsComponent
|
||||||
|
],
|
||||||
|
providers : []
|
||||||
|
})
|
||||||
|
export class DashboardSettingsModule
|
||||||
|
{
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { DashboardService } from 'app/modules/admin/dashboard/dashboard.service';
|
import { DashboardService } from 'app/modules/dashboard/dashboard.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
@ -1,5 +1,5 @@
|
|||||||
import { Route } from '@angular/router';
|
import { Route } from '@angular/router';
|
||||||
import { DashboardComponent } from 'app/modules/admin/dashboard/dashboard.component';
|
import { DashboardComponent } from 'app/modules/dashboard/dashboard.component';
|
||||||
import {DashboardResolver} from "./dashboard.resolvers";
|
import {DashboardResolver} from "./dashboard.resolvers";
|
||||||
|
|
||||||
export const dashboardRoutes: Route[] = [
|
export const dashboardRoutes: Route[] = [
|
@ -1,8 +1,8 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { SharedModule } from 'app/shared/shared.module';
|
import { SharedModule } from 'app/shared/shared.module';
|
||||||
import { DetailComponent } from 'app/modules/admin/detail/detail.component';
|
import { DetailComponent } from 'app/modules/detail/detail.component';
|
||||||
import { detailRoutes } from 'app/modules/admin/detail/detail.routing';
|
import { detailRoutes } from 'app/modules/detail/detail.routing';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
import { MatDividerModule } from '@angular/material/divider';
|
import { MatDividerModule } from '@angular/material/divider';
|
||||||
import { MatIconModule } from '@angular/material/icon';
|
import { MatIconModule } from '@angular/material/icon';
|
@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { DetailService } from 'app/modules/admin/detail/detail.service';
|
import { DetailService } from 'app/modules/detail/detail.service';
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
@ -1,5 +1,5 @@
|
|||||||
import { Route } from '@angular/router';
|
import { Route } from '@angular/router';
|
||||||
import { DetailComponent } from 'app/modules/admin/detail/detail.component';
|
import { DetailComponent } from 'app/modules/detail/detail.component';
|
||||||
import {DetailResolver} from "./detail.resolvers";
|
import {DetailResolver} from "./detail.resolvers";
|
||||||
|
|
||||||
export const detailRoutes: Route[] = [
|
export const detailRoutes: Route[] = [
|
Loading…
Reference in new issue