@php use App\Models\Cases;use App\Models\CasesInfo\Stage;use App\Services\Dashboard\DashboardService; @endphp @inject('widgetHelper', '\App\Helpers\OnDemandReportWidgetHelper') @include('reports.on-demand.templates.incl_style')

TLP AMBER CISO

EXECUTIVE REPORT
{{ $isLatam?'El informe incluye: RIESGO, Ciberseguridad e Información Operacional.':'The report includes: RISK, Cybersecurity and Operational information.' }}
{{ $isLatam?'Sobre este reporte':'About this report' }}

{{ $isLatam?'Este informe a pedido proporciona información de nivel ejecutivo sobre el estado de la ciberseguridad para su organización, incluidos los principales indicadores de seguridad y rendimiento.': 'This on-demand report provides executive level information as of the state of Cybersecurity for your organization including top security indicators and performance.' }}

RISK

Actual Risk

{!! \App\Widgets\Dashboard\CurrentActualRiskWidget::renderBody() !!}

Accepted Risk

{!! \App\Widgets\Dashboard\CurrentAcceptedRiskWidget::renderBody() !!}

Confidence

{!! \App\Models\ServiceGroup::getRiskConfidence() !!}

{{ \App\Widgets\Dashboard\OverallAcceptedRiskLevelWidget::renderTitle() }}

@include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>529])

VULNERABILITY

@include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>179]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>520]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>528])

THREATS

@include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>515]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>518]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>521]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>522]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>523]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>524]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>530])

OPERATIONAL

Total Number of Cases

Open {{ Cases::countByStatus([Cases::STATUS_OPEN]) }}
Answered {{ Cases::countByStatus([Cases::STATUS_INFORMATIVE, Cases::STATUS_SUSPENDED]) }}
Closed {{ Cases::countByStatus([Cases::STATUS_CLOSED]) }}

Notable Events

@forelse($report->data['notableTypes'] ?? [] as $type => $qty) @empty @endforelse
Notable Event Type How Many #
{{ $type }} {{ $qty }}
N/A

Total Remediation Cases by Stage

@php $groupedByStageAndQueueCases=$report->data['groupedByStageAndQueueCases'] ?? []; @endphp @php $rStages=\App\Models\CasesInfo\Stage::getRemediationStage(); $queues = \App\Models\Queue::getSkywatchList(); @endphp @foreach($rStages as $stage) @endforeach @php $totals = array_fill(0, count($rStages), 0); @endphp @foreach($groupedByStageAndQueueCases as $queue=>$casesByStages) @if(isset($queues[$queue])) only skywatch queues @foreach($rStages as $index => $stage) @endforeach @endif @endforeach @foreach($totals as $total) @endforeach
{{ $stage->name }}
{{ $queues[$queue] }} @php $caseCount = $casesByStages[$stage->name] ?? 0; $totals[$index] += $caseCount; @endphp {{ $caseCount }}
Total{{ $total }}

Vulnerabilities Resolved Over Time

Vulnerabilities: Average Time to Resolve

Operational Metrics per Queue Over Time

@php $timeByQueue=$report->data['timeByQueue'] ?? [] @endphp @foreach(\App\Models\Queue::getSkywatchList() as $qId=>$qName) @endforeach
Divisions AVG. Time To Resolve, H AVG. Time To Respond, H
{{ $qName }} {{ time_to_h(isset($timeByQueue[$qId])?(isset($timeByQueue[$qId]['time_to_resolve'])?$timeByQueue[$qId]['time_to_resolve']:0):0) }} {{ time_to_h(isset($timeByQueue[$qId])?(isset($timeByQueue[$qId]['time_to_respond'])?$timeByQueue[$qId]['time_to_respond']:0):0) }}

Monthly Average Time per Department

@php $groupedStages = Stage::query() ->select('id', 'group', 'case_type_id') ->groupBy(['case_type_id']) ->with('caseType') ->get(); function formatSecondsBlade($seconds): string { $seconds = (int)$seconds; $d = floor($seconds / 86400); $seconds %= 86400; $h = floor($seconds / 3600); $seconds %= 3600; $m = floor($seconds / 60); $s = $seconds % 60; return "{$d}d {$h}h {$m}m {$s}s"; } @endphp @foreach($groupedStages as $stage)

{{$stage->group}}

@php $additionalDashboardData = DashboardService::init()->handle($stage->case_type_id); $stages = $additionalDashboardData['stages']; $averageTimeRemediatePerStage = $additionalDashboardData['averageTimeRemediatePerStage']; $countCasesPerStage = $additionalDashboardData['countCasesPerStage']; @endphp

Average Time to Remediate

@php $lastStage = $stages->last(); @endphp @foreach($stages as $stage) @if($stage->id !== $lastStage->id) @endif @endforeach
Stages How Many #
{!! $stage->name !!} {{ formatSecondsBlade($averageTimeRemediatePerStage->get($stage->id)) }}

Workload

@php $lastStage = $stages->last(); @endphp @foreach($stages as $stage) @endforeach
Stages How Many #
{!! $stage->name !!} {{ $countCasesPerStage->get($stage->id) ?? 0 }}
@endforeach

DAILYBRIEF

Active High-Severity Items

@php $caseAccountStatistic = $report->data['caseAccountStatistic'] ?? []; $openCaseCountStatistic = $caseAccountStatistic['open_cases_count'] ?? 0; $countOpenMssIntCases = $report->data['countOpenMssIntCases'] ?? 0; if($countOpenMssIntCases - $openCaseCountStatistic > 0){ $class = 'red-color'; $arrow = '↑'; } elseif ($countOpenMssIntCases - $openCaseCountStatistic < 0) { $class = 'green-color'; $arrow = '↓'; } else { $class = 'grey-color'; $arrow = ''; } @endphp
{{$countOpenMssIntCases}}
{!! $arrow !!} {{ ($countOpenMssIntCases - $openCaseCountStatistic) > 0 ? '+' : '' }}{{$countOpenMssIntCases - $openCaseCountStatistic}}

Executive Action Required

@php $executiveActionRequiredCaseIds = $report->data['executiveActionRequiredCaseIds'] ?? []; @endphp @if(!empty($executiveActionRequiredCaseIds))
{{ count($executiveActionRequiredCaseIds) }} {{ count($executiveActionRequiredCaseIds) === 1 ? 'item' : 'items' }} pending executive awareness or decision
@else
No executive action required today
@endif
@include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>680]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>681]) @include('reports.on-demand.templates.incl_splunk_widget',['widget_id'=>682])

Ongoing cases

@foreach($report->data['cases'] ?? [] as $case) @endforeach
Case # Service Priority Hours Status
{{ $case['id'] . ' ' . $case['name'] }} {{ $case['service']['short_name'] ?? '' }} {{ \App\Models\Cases::getPriorityName($case['priority']) ?? '' }} {{ \App\Models\Cases::getTimeCase($case['id']) ?? '' }} {{ \App\Models\Cases::getStatusName($case['status']) ?? '' }}

Cybersecurity News

@foreach($report->data['news']['data'] ?? [] as $new) @endforeach
Title Categories Industries
{{ $new['title']}} {{ implode(', ', array_column($new['categories'] ?? [], 'name')) }} {{ implode(', ', array_column($new['industries'] ?? [], 'name')) }}

= Limited disclosure, restricted to participants’ organizations. Sources may use TLP:AMBER when information requires support to be effectively acted upon, yet carries risks to privacy, reputation, or operations if shared outside of the organizations involved. Recipients may only share TLP:AMBER information with members of their own organization, and with clients or customers who need to know the information to protect themselves or prevent further harm. Sources are at liberty to specify additional intended limits of the sharing: these must be adhered to.