Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(working copy)
@@ -57,6 +57,11 @@
 } from './components/sub-components/resource-monitoring-llb-details/resource-monitoring-llb-details';
 import {Reports} from './components/reports/reports';
 import {ReportsOverview} from './components/sub-components/reports-overview/reports-overview';
+import {AlertLog} from './components/sub-components/alert-log/alert-log';
+import {AlertMsg} from './services/alert-msg';
+import {AlertThresholds} from './components/sub-components/alert-thresholds/alert-thresholds';
+import {AlertRulesOverview} from './components/sub-components/alert-rules-overview/alert-rules-overview';
+import {EventMonitoringOverview} from './components/sub-components/event-monitoring-overview/event-monitoring-overview';
 
 
 export const routes: Routes = [
@@ -95,6 +100,26 @@
             data: {roles: ['super_admin', 'device_admin', 'common_admin']}
           },
         ]
+      },
+      {
+        path: 'alerting',
+        children: [
+          {
+            path: 'logs',
+            component: AlertLog,
+            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+          },
+          {
+            path: 'rules',
+            component: AlertRulesOverview,
+            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+          },
+          {
+            path: 'default',
+            component: AlertThresholds,
+            data: {roles: ['super_admin', 'device_admin', 'common_admin']}
+          },
+          ]
       },
       {
         path: 'system',
@@ -252,6 +277,7 @@
           {path: 'resources/slb-real/:deviceIp/:serviceName', component: ResourceMonitoringSlbRealDetails},
           {path: 'resources/llb/:deviceIp/:linkName', component: ResourceMonitoringLlbDetails},
           {path: 'resources/ssl-vpn/:deviceIp/:serviceName', component: ResourceMonitoringSslVpnDetails},
+          {path: 'events', component: EventMonitoringOverview},
         ]
       },
       {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.html	(working copy)
@@ -0,0 +1,22 @@
+<h2 mat-dialog-title>{{ data?.title }}</h2>
+
+<mat-dialog-content>
+  <table mat-table [dataSource]="dataSource" class="mat-elevation-z1">
+    <ng-container matColumnDef="key">
+      <td mat-cell *matCellDef="let element"> {{ element.key }}</td>
+    </ng-container>
+    <ng-container matColumnDef="value">
+      <td mat-cell *matCellDef="let element"> {{ element.value }}</td>
+    </ng-container>
+    <tr mat-row *matRowDef="let row; columns: dataColumns;"></tr>
+  </table>
+</mat-dialog-content>
+
+<mat-dialog-actions align="center">
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Close
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.scss	(added)
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.scss	(revision 0)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.scss	(revision 0)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.spec.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.spec.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.spec.ts	(working copy)
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { ShowInfo } from './show-info';
+
+describe('ShowInfo', () => {
+  let component: ShowInfo;
+  let fixture: ComponentFixture<ShowInfo>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [ShowInfo]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(ShowInfo);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.ts	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/common/show-info/show-info.ts	(working copy)
@@ -0,0 +1,29 @@
+import {Component, inject, OnInit} from '@angular/core';
+import {SharedModule} from '../../../shared/shared-module';
+import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';
+import {MatTableDataSource} from '@angular/material/table';
+import {UtilsService} from '../../../services/utils-service';
+
+@Component({
+  selector: 'app-show-info',
+  imports: [SharedModule],
+  templateUrl: './show-info.html',
+  styleUrl: './show-info.scss'
+})
+export class ShowInfo implements OnInit {
+  readonly dialogRef = inject(MatDialogRef<ShowInfo>);
+  readonly data = inject(MAT_DIALOG_DATA);
+  dataColumns: Array<string> = ['key', 'value'];
+  dataSource = new MatTableDataSource([]);
+
+  constructor(private _utils: UtilsService) {
+  }
+
+  ngOnInit() {
+    this.dataSource = this._utils.processConfigData(this.data?.device);
+  }
+
+  onCancel(): void {
+    this.dialogRef.close(false);
+  }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/notification/notification.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/notification/notification.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/notification/notification.ts	(working copy)
@@ -2,7 +2,7 @@
 import {NotificationSettings} from '../sub-components/notification-settings/notification-settings';
 import {SharedModule} from '../../shared/shared-module';
 import {TabContainer, TabDefinition} from '../tab-container/tab-container';
-import {UserManagement} from '../sub-components/user-management/user-management';
+import {NotificationChannels} from '../sub-components/notification-channels/notification-channels';
 
 @Component({
   selector: 'app-notification',
@@ -15,7 +15,7 @@
 })
 export class Notification {
   tabDefinitions: TabDefinition[] = [
-    {label: 'Notification Channel', component: UserManagement, paramName: 'User Management'},
-    {label: 'Notification Settings', component: NotificationSettings, paramName: 'User Management'},
+    {label: 'Notification Channel', component: NotificationChannels, paramName: 'notification-channel'},
+    {label: 'Notification Settings', component: NotificationSettings, paramName: 'notification-settings'},
   ]
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.html	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.html	(working copy)
@@ -1 +1 @@
-<p>reports works!</p>
+<app-tab-container [tabDefinitions]="tabDefinitions" paramKey="tab"/>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/reports/reports.ts	(working copy)
@@ -1,11 +1,20 @@
-import { Component } from '@angular/core';
+import {Component} from '@angular/core';
+import {SharedModule} from '../../shared/shared-module';
+import {TabContainer, TabDefinition} from '../tab-container/tab-container';
+import {ReportsOverview} from '../sub-components/reports-overview/reports-overview';
+import {ReportTasks} from '../sub-components/report-tasks/report-tasks';
+import {ReportsCustomization} from '../sub-components/reports-customization/reports-customization';
 
 @Component({
   selector: 'app-reports',
-  imports: [],
+  imports: [SharedModule, TabContainer],
   templateUrl: './reports.html',
   styleUrl: './reports.scss'
 })
 export class Reports {
-
+  tabDefinitions: TabDefinition[] = [
+    {label: 'Reports', component: ReportsOverview, paramName: 'reports'},
+    {label: 'Report Tasks', component: ReportTasks, paramName: 'report-tasks'},
+    {label: 'Report Customization', component: ReportsCustomization, paramName: 'report-customization'},
+  ]
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-config-overview/device-config-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-config-overview/device-config-overview.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-config-overview/device-config-overview.ts	(working copy)
@@ -469,16 +469,16 @@
   ngOnInit() {
     setTimeout(() => {
       if (this.data?.device?.device_type.toLowerCase() === 'apv' || this.data?.device?.device_type.toLowerCase() === 'vapv') {
-        this.getAPVVirtualServices();
+        this.getAPVVirtualServices(this.data?.device?.id);
       }
     })
   }
 
-  getAPVVirtualServices() {
-    this._device.getAPVVirtualServices().pipe(take(1)).subscribe({
+  getAPVVirtualServices(deviceId: any) {
+    this._device.getAPVSLBVirtualServices(deviceId).pipe(take(1)).subscribe({
       next: (result: any) => {
         if (result && result.VirtualService) {
-          this.virtualServices = result.VirtualService;
+          this.virtualServices = result?.VirtualService;
         }
         this._cdRef.detectChanges();
       },
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/edit-report-tasks.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/edit-report-tasks.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/edit-report-tasks.html	(working copy)
@@ -0,0 +1,241 @@
+<h2 mat-dialog-title>{{ isNew ? 'New' : 'Edit' }} Report Task</h2>
+<mat-dialog-content>
+  <form
+    (ngSubmit)="onSubmit()"
+    [formGroup]="configForm"
+    class="common-form"
+  >
+    <div class="form-field-wrapper">
+      <label for="taskName" class="form-label">Task name *</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <input
+          id="taskName"
+          formControlName="taskName"
+          matInput
+          placeholder="Task name"
+          type="text"
+        />
+        @if (configForm.get('taskName')?.invalid && configForm.get('taskName')?.touched) {
+          <mat-error>
+            @if (configForm.get('taskName')?.errors?.['required']) {
+              Task name is required.
+            }
+          </mat-error>
+        }
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="stype" class="form-label">Subject Type *</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <mat-select formControlName="stype" (selectionChange)="onSubjectTypeChange()">
+          @for (_type of subjectTypes; track _type) {
+            <mat-option [value]="_type?.value">{{ _type?.label }}</mat-option>
+          }
+        </mat-select>
+        @if (configForm.get('stype')?.invalid && configForm.get('stype')?.touched) {
+          <mat-error>
+            @if (configForm.get('stype')?.errors?.['required']) {
+              Subject type is required.
+            }
+          </mat-error>
+        }
+      </mat-form-field>
+    </div>
+    @if (configForm.value.stype === 'service_status') {
+      <div class="form-field-wrapper">
+        <label for="deviceName" class="form-label">Device Name *</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <mat-select formControlName="deviceName" (selectionChange)="onDeviceChange()">
+            @for (_device of deviceNames; track _device) {
+              <mat-option [value]="_device">{{ _device.label }}</mat-option>
+            }
+          </mat-select>
+          @if (configForm.get('deviceName')?.invalid && configForm.get('deviceName')?.touched) {
+            <mat-error>
+              @if (configForm.get('deviceName')?.errors?.['required']) {
+                Device name is required.
+              }
+            </mat-error>
+          }
+        </mat-form-field>
+      </div>
+    }
+    <div class="form-field-wrapper">
+      <label for="sname" class="form-label">Subject Name *</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <mat-select formControlName="sname">
+          @for (_name of subjectNames; track _name) {
+            <mat-option [value]="_name">{{ _name?.label }}</mat-option>
+          }
+        </mat-select>
+        @if (configForm.get('sname')?.invalid && configForm.get('sname')?.touched) {
+          <mat-error>
+            @if (configForm.get('sname')?.errors?.['required']) {
+              Subject name is required.
+            }
+          </mat-error>
+        }
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="schedule" class="form-label">Onetime *</label>
+      <mat-radio-group formControlName="schedule" aria-label="Schedule">
+        <mat-radio-button value="1">Onetime</mat-radio-button>
+        <mat-radio-button value="2">Schedule</mat-radio-button>
+      </mat-radio-group>
+    </div>
+    @if (configForm.value.schedule == "1" && (configForm.value.stype == 'device_status' || configForm.value.stype == 'service_status')) {
+      <div class="form-field-wrapper">
+        <label for="start" class="form-label">Start Time</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            matInput
+            [ngxMatDatetimePicker]="startDatePicker"
+            placeholder="2025-01-01 00:00:00"
+            formControlName="startTime"
+          />
+          <ngx-mat-datepicker-toggle
+            matSuffix
+            [for]="startDatePicker"
+          ></ngx-mat-datepicker-toggle>
+          <ngx-mat-datetime-picker
+            #startDatePicker
+            [showSpinners]="true"
+            [showSeconds]="true"
+            [touchUi]="false"
+            [stepHour]="1"
+            [stepMinute]="1"
+            [stepSecond]="1"
+            [disableMinute]="false"
+          >
+            <mat-icon
+              ngxMatDatetimePickerToday
+              (click)="startDatePicker.close()"
+            >today
+            </mat-icon>
+          </ngx-mat-datetime-picker>
+        </mat-form-field>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="end" class="form-label">End Time</label>
+        <mat-form-field appearance="outline" subscriptSizing="dynamic">
+          <input
+            matInput
+            [ngxMatDatetimePicker]="endDatePicker"
+            placeholder="2025-01-01 00:00:00"
+            formControlName="endTime"
+          />
+          <ngx-mat-datepicker-toggle
+            matSuffix
+            [for]="endDatePicker"
+          ></ngx-mat-datepicker-toggle>
+          <ngx-mat-datetime-picker
+            #endDatePicker
+            [showSpinners]="true"
+            [showSeconds]="true"
+            [touchUi]="false"
+            [stepHour]="1"
+            [stepMinute]="1"
+            [stepSecond]="1"
+            [disableMinute]="false"
+          >
+            <mat-icon
+              ngxMatDatetimePickerToday
+              (click)="endDatePicker.close()"
+            >today
+            </mat-icon>
+          </ngx-mat-datetime-picker>
+        </mat-form-field>
+      </div>
+    }
+    @if (configForm.value.schedule == "2") {
+      <div class="form-field-wrapper">
+        <label for="selectedHour" class="form-label">Execution Time</label>
+        <div class="time-select-container">
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="selectedHour" placeholder="HH">
+              @for (_value of hours; track _value) {
+                <mat-option [value]="_value">{{ _value | number: '2.0' }}</mat-option>
+              }
+            </mat-select>
+          </mat-form-field>
+
+          <span class="time-separator">:</span>
+
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="selectedMinute" placeholder="MM">
+              @for (_value of minutes; track _value) {
+                <mat-option [value]="_value">{{ _value | number: '2.0' }}</mat-option>
+              }
+            </mat-select>
+          </mat-form-field>
+        </div>
+      </div>
+      <div class="form-field-wrapper">
+        <label for="selectedFrequency" class="form-label">Execution Frequency</label>
+        <div class="time-select-container">
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="selectedFrequency" placeholder="Frequency">
+              @for (_value of frequency; track _value) {
+                <mat-option [value]="_value.value">{{ _value.label }}</mat-option>
+              }
+            </mat-select>
+          </mat-form-field>
+          @if (configForm.value.selectedFrequency === 'weekly') {
+            <mat-form-field appearance="outline" subscriptSizing="dynamic">
+              <mat-select formControlName="selectedFrequencyModule" placeholder="Days">
+                @for (_value of fullDaysOfWeek; track _value) {
+                  <mat-option [value]="_value">{{ _value }}</mat-option>
+                }
+              </mat-select>
+            </mat-form-field>
+          } @else if (configForm.value.selectedFrequency === 'monthly') {
+            <mat-form-field appearance="outline" subscriptSizing="dynamic">
+              <mat-select formControlName="selectedFrequencyModule" placeholder="Days">
+                @for (_value of days; track _value) {
+                  <mat-option [value]="_value">{{ _value }}</mat-option>
+                }
+              </mat-select>
+            </mat-form-field>
+          }
+        </div>
+      </div>
+    }
+    <div class="form-field-wrapper">
+      <label for="notificationChannel" class="form-label">Notification Channel</label>
+      <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <mat-select formControlName="notificationChannel">
+          @for (_name of notificationChannels; track _name) {
+            <mat-option [value]="_name?.value">{{ _name?.label }}</mat-option>
+          }
+        </mat-select>
+        @if (configForm.get('notificationChannel')?.invalid && configForm.get('notificationChannel')?.touched) {
+          <mat-error>
+            @if (configForm.get('notificationChannel')?.errors?.['required']) {
+              Recipient is required.
+            }
+          </mat-error>
+        }
+      </mat-form-field>
+    </div>
+    <div class="form-field-wrapper">
+      <label for="recipient" class="form-label"></label>
+      <a class="a-link-color" matTooltip="Create Notification Channel" (click)="createNotificationChannel()">Create
+        Notification Channel</a>
+    </div>
+  </form>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Close
+  </button>
+  <button
+    mat-button
+    color="basic"
+    (click)="onSubmit()">
+    Submit
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.html	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.html	(working copy)
@@ -1 +1,51 @@
-<p>report-tasks works!</p>
+<mat-card class="page-card-1" appearance="filled">
+  <mat-card-header>
+    <div>
+      <button mat-raised-button (click)="createTask()">New Task</button> &nbsp;&nbsp;
+      <button mat-raised-button (click)="clearTasks()" class="warning">Clear All Reports</button> &nbsp;&nbsp;
+    </div>
+  </mat-card-header>
+</mat-card>
+<div class="table-container">
+  <div class="mat-elevation-z0">
+    <table mat-table [dataSource]="tasksDataSource">
+      <ng-container matColumnDef="serial">
+        <th mat-header-cell *matHeaderCellDef>SNo.</th>
+        <td mat-cell *matCellDef="let element">{{ element?.name }}</td>
+      </ng-container>
+      <ng-container matColumnDef="taskName">
+        <th mat-header-cell *matHeaderCellDef>Task Name</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="subject">
+        <th mat-header-cell *matHeaderCellDef>Subject</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="spec">
+        <th mat-header-cell *matHeaderCellDef>Created Time</th>
+        <td mat-cell *matCellDef="let element">{{ element?.path }}</td>
+      </ng-container>
+      <ng-container matColumnDef="status">
+        <th mat-header-cell *matHeaderCellDef>Status</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="nextRun">
+        <th mat-header-cell *matHeaderCellDef>Status</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="notification">
+        <th mat-header-cell *matHeaderCellDef>Action</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="action">
+        <th mat-header-cell *matHeaderCellDef>Status</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <tr mat-header-row *matHeaderRowDef="tasksColumns"></tr>
+      <tr mat-row *matRowDef="let row; columns: tasksColumns;"></tr>
+      <tr class="mat-row table-no-data" *matNoDataRow>
+        <td class="mat-cell" colspan="9">No results found.</td>
+      </tr>
+    </table>
+  </div>
+</div>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/report-tasks/report-tasks.ts	(working copy)
@@ -1,11 +1,249 @@
-import { Component } from '@angular/core';
+import {Component, inject, OnInit} from '@angular/core';
+import {SharedModule} from '../../../shared/shared-module';
+import {MatTableDataSource} from '@angular/material/table';
+import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
+import {FormBuilder, FormGroup, Validators} from '@angular/forms';
+import {NgxMatDatepickerToggle} from '@ngxmc/datetime-picker';
+import {take} from 'rxjs/operators';
+import {DeviceService} from '../../../services/device-service';
+import {NotificationService} from '../../../services/notification';
 
 @Component({
   selector: 'app-report-tasks',
-  imports: [],
+  imports: [SharedModule],
   templateUrl: './report-tasks.html',
   styleUrl: './report-tasks.scss'
 })
 export class ReportTasks {
+  tasksColumns: string[] = ['serial', 'taskName', 'subject', 'spec', 'status', 'nextRun', 'notification', 'action'];
+  tasksDataSource: MatTableDataSource<any> = new MatTableDataSource();
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
 
+  constructor() {
+  }
+
+  createTask(): void {
+    this.dialogConfig.data = {};
+    this.dialogConfig.disableClose = true;
+    const dialogRef = this.dialog.open(EditReportTasksDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe((isUpdated: boolean) => {
+      if (isUpdated) {
+      }
+    })
+  }
+
+  clearTasks(): void {
+  }
 }
+
+@Component({
+  selector: 'edit-report-tasks',
+  imports: [SharedModule, NgxMatDatepickerToggle],
+  templateUrl: './edit-report-tasks.html',
+})
+export class EditReportTasksDialog implements OnInit {
+
+  isNew: boolean = true;
+  configForm: FormGroup;
+  readonly data = inject(MAT_DIALOG_DATA);
+  readonly dialogRef = inject(MatDialogRef<EditReportTasksDialog>);
+
+  subjectTypes: any = [
+    {label: 'Device Patrol', value: 'device_patrol'},
+    {label: 'Automatic Diagnose', value: 'automatic_diagnose'},
+    {label: 'Device Status', value: 'device_status'},
+    {label: 'Service Status', value: 'service_status'},
+  ]
+
+  subjectNamesRepo: any = {
+    'device_patrol': [
+      {label: 'Server Load Balance', value: 'slb'},
+      {label: 'SSL VPN', value: 'ssl_vpn'},
+    ],
+    'automatic_diagnose': [
+      {label: 'Server Load Balance', value: 'slb'},
+    ],
+    'device_status': [],
+    'service_status': []
+  };
+
+  subjectNames: any = [
+    {label: 'Server Load Balance', value: 'slb'},
+    {label: 'SSL VPN', value: 'ssl_vpn'},
+  ]
+
+  deviceNames: any = [];
+
+  devices: any = [];
+
+  notificationChannels: any = [];
+
+  public days: number[] = [];
+  public hours: number[] = [];
+  public minutes: number[] = [];
+  public fullDaysOfWeek: string[] = [
+    'Sunday',
+    'Monday',
+    'Tuesday',
+    'Wednesday',
+    'Thursday',
+    'Friday',
+    'Saturday'
+  ];
+  public frequency: any = [
+    {label: 'Daily', value: 'daily'},
+    {label: 'Weekly', value: 'weekly'},
+    {label: 'Monthly', value: 'monthly'},
+  ];
+  deviceServices: any[] = [];
+
+  constructor(
+    private _fB: FormBuilder,
+    private _device: DeviceService,
+    private _notification: NotificationService,
+  ) {
+    this.configForm = this._fB.group({
+      taskName: ['', Validators.required],
+      stype: ['device_patrol', Validators.required],
+      deviceName: [''],
+      sname: ['slb', Validators.required],
+      schedule: ['1', Validators.required],
+      startTime: [''],
+      endTime: [''],
+      notificationChannel: [''],
+      selectedHour: [0],
+      selectedMinute: [0],
+      selectedFrequency: ['daily'],
+      selectedFrequencyModule: ['']
+    })
+  }
+
+  ngOnInit() {
+    for (let i = 0; i < 24; i++) {
+      this.hours.push(i);
+    }
+    for (let i = 0; i < 60; i++) {
+      this.minutes.push(i);
+    }
+    for (let i = 1; i <= 31; i++) {
+      this.days.push(i);
+    }
+  }
+
+  getConnectedDevices(): void {
+    this.devices = [];
+    this._device.getDeviceGroups()
+      .pipe(take(1))
+      .subscribe({
+        next: (data: any) => {
+          this.devices = data.devices;
+          if (this.configForm.value.stype === 'device_status') {
+            this.subjectNames = this.devices.map((device: any) => {
+              return {
+                ...device,
+                label: device.name,
+                value: device.name,
+              }
+            });
+          }
+          if (this.configForm.value.stype === 'service_status') {
+            this.deviceNames = this.devices.map((device: any) => {
+              return {
+                ...device,
+                label: device.name,
+                value: device.name,
+              }
+            });
+          }
+        }, error: (error: { message: string; }) => {
+          console.log(error);
+          this._notification.showError(error.message);
+        }
+      })
+  }
+
+  onDeviceChange() {
+    this.deviceServices = [];
+    this.getAPVSLBVirtualServices(this.configForm.value.deviceName);
+  }
+
+  getAPVSLBVirtualServices(_device: any) {
+    this._device.getAPVSLBVirtualServices(_device?.id)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          let virtual_services = result?.VirtualService.map((service: any) => {
+            return {
+              ...service,
+              label: service.service_name,
+            }
+          });
+          this.deviceServices = [...virtual_services]
+          this.getAPVSLBRealServices(_device);
+        },
+        error: (error: any) => {
+          this._notification.showError(error.message);
+        }
+      })
+  }
+
+  getAPVSLBRealServices(_device: any) {
+    this._device.getAPVSLBRealServices(_device?.id)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          let real_services = result?.RealService.map((service: any) => {
+            return {
+              ...service,
+              label: service.service_name,
+            }
+          });
+          this.deviceServices = [...this.deviceServices, ...real_services]
+          this.getAPVLLBServices(_device);
+        },
+        error: (error: any) => {
+          this._notification.showError(error.message);
+        }
+      })
+  }
+
+  getAPVLLBServices(_device: any) {
+    let payload = {agent_host: _device?.ip, stat_name: 'summary_data'}
+    this._device.getLLBMonitoringMetrics(payload)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          let llb_services = result?.data.map((link: any) => {
+            return {
+              ...link,
+              label: link.link_name,
+            }
+          });
+          this.deviceServices = [...this.deviceServices, ...llb_services]
+          this.subjectNames = this.deviceServices;
+        },
+        error: (error: any) => {
+          this._notification.showError(error.message);
+        }
+      })
+  }
+
+  onSubjectTypeChange() {
+    this.subjectNames = this.subjectNamesRepo[this.configForm.value?.stype];
+    this.deviceServices = [];
+    if (this.configForm.value.stype === 'device_status' || this.configForm.value.stype === 'service_status') {
+      this.getConnectedDevices();
+    }
+  }
+
+  createNotificationChannel() {
+  }
+
+  onSubmit(): void {
+  }
+
+  onCancel(): void {
+    this.dialogRef.close(false);
+  }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.html	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.html	(working copy)
@@ -1 +1,42 @@
-<p>reports-overview works!</p>
+<mat-card class="page-card-1" appearance="filled">
+  <mat-card-header>
+    <div>
+      <button mat-raised-button (click)="clearReports()" class="warning">Clear All Reports</button> &nbsp;&nbsp;
+    </div>
+  </mat-card-header>
+</mat-card>
+<div class="table-container">
+  <div class="mat-elevation-z0">
+    <table mat-table [dataSource]="reportsDataSource">
+      <ng-container matColumnDef="serial">
+        <th mat-header-cell *matHeaderCellDef>SNo.</th>
+        <td mat-cell *matCellDef="let element">{{ element?.name }}</td>
+      </ng-container>
+      <ng-container matColumnDef="ctime">
+        <th mat-header-cell *matHeaderCellDef>Created Time</th>
+        <td mat-cell *matCellDef="let element">{{ element?.path }}</td>
+      </ng-container>
+      <ng-container matColumnDef="taskName">
+        <th mat-header-cell *matHeaderCellDef>Task Name</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="subject">
+        <th mat-header-cell *matHeaderCellDef>Subject</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="status">
+        <th mat-header-cell *matHeaderCellDef>Status</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <ng-container matColumnDef="action">
+        <th mat-header-cell *matHeaderCellDef>Action</th>
+        <td mat-cell *matCellDef="let element">{{ element?.size }}</td>
+      </ng-container>
+      <tr mat-header-row *matHeaderRowDef="reportsColumns"></tr>
+      <tr mat-row *matRowDef="let row; columns: reportsColumns;"></tr>
+      <tr class="mat-row table-no-data" *matNoDataRow>
+        <td class="mat-cell" colspan="6">No results found.</td>
+      </tr>
+    </table>
+  </div>
+</div>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/reports-overview/reports-overview.ts	(working copy)
@@ -1,11 +1,22 @@
 import { Component } from '@angular/core';
+import {SharedModule} from '../../../shared/shared-module';
+import {MatTableDataSource} from '@angular/material/table';
 
 @Component({
   selector: 'app-reports-overview',
-  imports: [],
+  imports: [SharedModule],
   templateUrl: './reports-overview.html',
   styleUrl: './reports-overview.scss'
 })
 export class ReportsOverview {
 
+  reportsColumns: string[] = ['serial', 'ctime', 'taskName', 'subject', 'status', 'action'];
+  reportsDataSource: MatTableDataSource<any> = new MatTableDataSource();
+
+  constructor(
+
+  ) {
+  }
+
+  clearReports(): void {}
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/resource-monitoring-llb/resource-monitoring-llb.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/resource-monitoring-llb/resource-monitoring-llb.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/resource-monitoring-llb/resource-monitoring-llb.ts	(working copy)
@@ -50,7 +50,7 @@
           this.groups = data.groups;
           this.devices.forEach((device: any) => {
             if ((device?.type.toLowerCase() === 'apv' || device?.type.toLowerCase() === 'vapv') && device?.connection) {
-              devices.push(device);
+              devices.push(device?.ip);
             }
           })
           this.getLLBMonitoringMetrics(devices);
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.html	(working copy)
@@ -42,34 +42,34 @@
         }
       </td>
     </ng-container>
-    <ng-container matColumnDef="status">
-      <th mat-header-cell *matHeaderCellDef>Status</th>
-      <td mat-cell *matCellDef="let element">
-        @if (element?.upDown === 'UP') {
-          <fa-icon [icon]="['far', 'check-circle']" class="success-icon"></fa-icon> {{ element?.upDown }}
-        } @else {
-          <fa-icon [icon]="['far', 'xmark-circle']" class="delete-icon"></fa-icon> {{ element?.upDown }}
-        }
-      </td>
-    </ng-container>
-    <ng-container matColumnDef="groupWeight">
-      <th mat-header-cell *matHeaderCellDef>Group Weight</th>
-      <td mat-cell *matCellDef="let element">
-        @if (element?.groups.length > 0) {
-          <table>
-            <tbody>
-              @for (_group of element?.groups; track _group) {
-                <tr>
-                  <td matTooltip="Group Name">{{ _group.group_name }}</td>
-                  <td matTooltip="Group Method">{{ _group.group_method }}</td>
-                  <td matTooltip="Group Weight">{{ _group.weight }}</td>
-                </tr>
-              }
-            </tbody>
-          </table>
-        }
-      </td>
-    </ng-container>
+<!--    <ng-container matColumnDef="status">-->
+<!--      <th mat-header-cell *matHeaderCellDef>Status</th>-->
+<!--      <td mat-cell *matCellDef="let element">-->
+<!--        @if (element?.upDown === 'UP') {-->
+<!--          <fa-icon [icon]="['far', 'check-circle']" class="success-icon"></fa-icon> {{ element?.upDown }}-->
+<!--        } @else {-->
+<!--          <fa-icon [icon]="['far', 'xmark-circle']" class="delete-icon"></fa-icon> {{ element?.upDown }}-->
+<!--        }-->
+<!--      </td>-->
+<!--    </ng-container>-->
+<!--    <ng-container matColumnDef="groupWeight">-->
+<!--      <th mat-header-cell *matHeaderCellDef>Group Weight</th>-->
+<!--      <td mat-cell *matCellDef="let element">-->
+<!--        @if (element?.groups.length > 0) {-->
+<!--          <table>-->
+<!--            <tbody>-->
+<!--              @for (_group of element?.groups; track _group) {-->
+<!--                <tr>-->
+<!--                  <td matTooltip="Group Name">{{ _group.group_name }}</td>-->
+<!--                  <td matTooltip="Group Method">{{ _group.group_method }}</td>-->
+<!--                  <td matTooltip="Group Weight">{{ _group.weight }}</td>-->
+<!--                </tr>-->
+<!--              }-->
+<!--            </tbody>-->
+<!--          </table>-->
+<!--        }-->
+<!--      </td>-->
+<!--    </ng-container>-->
     <ng-container matColumnDef="maxConn">
       <th mat-header-cell *matHeaderCellDef>Max Connection</th>
       <td mat-cell *matCellDef="let element">{{ element?.max_conn }}</td>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/topology-slb-real-service/topology-slb-real-service.ts	(working copy)
@@ -24,7 +24,7 @@
 
   totalRecords: number = 0;
   dataSource: MatTableDataSource<any> = new MatTableDataSource();
-  dataColumns: string[] = ['serial', 'serviceName', 'protocol', 'deviceName', 'deviceGroup', 'ip', 'port', 'enabled', 'status', 'groupWeight', 'maxConn', 'upCheck', 'downCheck'];
+  dataColumns: string[] = ['serial', 'serviceName', 'protocol', 'deviceName', 'deviceGroup', 'ip', 'port', 'enabled', 'maxConn', 'upCheck', 'downCheck']; //'groupWeight','status',
   @ViewChild(MatPaginator) paginator!: MatPaginator;
   deviceServices: any = [];
 
@@ -39,24 +39,48 @@
 
   ngOnInit(): void {
     setTimeout(() => {
-      this.getRealServices();
+      this.getDeviceGroups();
     })
   }
 
-  getRealServices() {
+  devices: any = [];
+
+  // groups: any = [];
+
+  getDeviceGroups() {
+    this.devices = [];
     this.deviceServices = [];
-    this._device.getRealServices()
+    this.dataSource.data = [];
+    this._device.getDeviceGroups()
       .pipe(take(1))
       .subscribe({
+        next: (data: any) => {
+          this.devices = data.devices;
+          this.devices.forEach((device: any) => {
+            if (device?.type.toLowerCase() === 'apv' || device?.type.toLowerCase() === 'vapv') {
+              this.getRealServices(device);
+            }
+          })
+          this._cdRef.detectChanges();
+        }, error: (error: { message: string; }) => {
+          console.log(error);
+          this._notification.showError(error.message);
+          this._cdRef.detectChanges();
+        }
+      })
+  }
+
+  getRealServices(device: any) {
+    this._device.getAPVSLBRealServices(device?.id)
+      .pipe(take(1))
+      .subscribe({
         next: (result: any) => {
-          for (let _device in result) {
-            result[_device]?.RealService.forEach((_service: any) => {
-              let tmp: any = _service;
-              tmp.device_name = result[_device]?.device?.name;
-              tmp.device_group = result[_device]?.device?.device_group;
-              this.deviceServices.push(tmp);
-            })
-          }
+          result?.RealService.forEach((_service: any) => {
+            let tmp: any = _service;
+            tmp.device_name = device?.name;
+            tmp.device_group = device?.device_group;
+            this.deviceServices.push(tmp);
+          })
           this.dataSource.data = this.deviceServices;
           this.dataSource.paginator = this.paginator;
           this.totalRecords = this.dataSource.data.length;
@@ -77,7 +101,7 @@
     const dialogRef = this.dialog.open(UpdateDeviceRealServiceDialog, this.dialogConfig);
     dialogRef.afterClosed().subscribe((isAdded: boolean) => {
       if (isAdded) {
-        this.getRealServices();
+        this.getDeviceGroups();
       }
     })
   }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(working copy)
@@ -112,6 +112,7 @@
   DELETE_DEVICE_CONFIG_FILE_URL: `${PREFIX}/api/cm/configuration/config_file/ConfigFile/_delete`,
   PERFORM_DEVICE_CONFIG_OPS_URL: `${PREFIX}/api/cm/configuration/config_file/ConfigFile/_perform`,
   GET_APV_VIRTUAL_SERVICES_URL: `${PREFIX}/proxy_req_dev/rest/loadbalancing/slb/vs/VirtualService`,
+  GET_APV_REAL_SERVICES_URL: `${PREFIX}/proxy_req_dev/rest/loadbalancing/slb/rs/RealService`,
   GET_SCHEDULE_DEVICE_BACKUP_URL: `${PREFIX}/cm/configuration/device/get_schedule_backup_all`,
   CLEAR_SCHEDULE_DEVICE_BACKUP_URL: `${PREFIX}/cm/configuration/device/clear_schedule_backup_all`,
   GET_DEVICE_CONFIG_BY_CONFIG_FILE_NAME_URL: `${PREFIX}/cm/configuration/configuration_file/get_config`,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(working copy)
@@ -155,15 +155,16 @@
     });
   }
 
-  getAPVVirtualServices() {
-    return this.http.get(URLS.GET_APV_VIRTUAL_SERVICES_URL);
-  }
-
   getAPVSLBVirtualServices(deviceId: string) {
     return this.http.get(`${URLS.GET_APV_VIRTUAL_SERVICES_URL}`, {},
       [{name: 'Cm-Data', value: deviceId}, {name: 'Cm-Type', value: 'device'}]);
   }
 
+  getAPVSLBRealServices(deviceId: string) {
+    return this.http.get(`${URLS.GET_APV_REAL_SERVICES_URL}`, {},
+      [{name: 'Cm-Data', value: deviceId}, {name: 'Cm-Type', value: 'device'}]);
+  }
+
   getScheduleDeviceBackup() {
     return this.http.get(URLS.GET_SCHEDULE_DEVICE_BACKUP_URL);
   }
@@ -541,10 +542,6 @@
   getSLBServices(deviceId: string | null) {
     return this.http.get(`${URLS.GET_SLB_SERVICES_URL}`, {},
       [{name: 'Cm-Data', value: deviceId}, {name: 'Cm-Type', value: 'device'}]);
-  }
-
-  getRealServices() {
-    return this.http.get(URLS.GET_REAL_SERVICES_URL);
   }
 
   updateRealService(payload: any) {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/styles.scss
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/styles.scss	(revision 2738)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/styles.scss	(working copy)
@@ -258,8 +258,32 @@
       flex-grow: 1;
       min-width: 300px;
       max-width: 600px;
+    }
+
+    .time-select-container {
+      display: flex;
+      gap: 5px;
+      flex-grow: 1;
+      max-width: 180px;
+      min-width: 120px;
+      align-items: center;
+      justify-content: flex-start;
+    }
+
+    .time-select-container mat-form-field {
+      min-width: unset !important;
+      max-width: unset !important;
+      flex-basis: 50px;
+      flex-grow: 0;
+      width: 120px;
     }
 
+    .time-separator {
+      font-size: 1.2em;
+      font-weight: 500;
+      margin-bottom: 1.25em;
+    }
+
     mat-slide-toggle {
       display: flex;
       justify-content: flex-start;
