|
|
<?php
|
|
|
/*
|
|
|
** Zabbix
|
|
|
** Copyright (C) 2001-2023 Zabbix SIA
|
|
|
**
|
|
|
** This program is free software; you can redistribute it and/or modify
|
|
|
** it under the terms of the GNU General Public License as published by
|
|
|
** the Free Software Foundation; either version 2 of the License, or
|
|
|
** (at your option) any later version.
|
|
|
**
|
|
|
** This program is distributed in the hope that it will be useful,
|
|
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
** GNU General Public License for more details.
|
|
|
**
|
|
|
** You should have received a copy of the GNU General Public License
|
|
|
** along with this program; if not, write to the Free Software
|
|
|
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
**/
|
|
|
|
|
|
|
|
|
require_once dirname(__FILE__).'/../common/testSlaReport.php';
|
|
|
require_once dirname(__FILE__).'/../../include/helpers/CDataHelper.php';
|
|
|
|
|
|
/**
|
|
|
* @backup dashboard, profiles
|
|
|
*
|
|
|
* @dataSource Services, Sla
|
|
|
*
|
|
|
* @onBefore prepareDashboardData
|
|
|
* @onBefore getDateTimeData
|
|
|
*/
|
|
|
class testDashboardSlaReportWidget extends testSlaReport {
|
|
|
|
|
|
private static $dashboardid;
|
|
|
private static $slaid;
|
|
|
private static $monthly_sla = 'SLA Monthly';
|
|
|
private static $create_page = 'Page for creating widgets';
|
|
|
private static $update_widget = 'Update widgets';
|
|
|
private static $delete_widget = 'Widget for delete';
|
|
|
|
|
|
private static $default_values = [
|
|
|
'SLA' => '',
|
|
|
'Service' => '',
|
|
|
'From' => '',
|
|
|
'To' => '',
|
|
|
'Show periods' => 20
|
|
|
];
|
|
|
|
|
|
/*
|
|
|
* SQL query to get widget and widget_field tables to compare hash values, but without widget_fieldid
|
|
|
* because it can change.
|
|
|
*/
|
|
|
private $sql = 'SELECT wf.widgetid, wf.type, wf.name, wf.value_int, wf.value_str, wf.value_groupid, wf.value_hostid,'.
|
|
|
' wf.value_itemid, wf.value_graphid, wf.value_sysmapid, w.widgetid, w.dashboard_pageid, w.type, w.name, w.x, w.y,'.
|
|
|
' w.width, w.height'.
|
|
|
' FROM widget_field wf'.
|
|
|
' INNER JOIN widget w'.
|
|
|
' ON w.widgetid=wf.widgetid ORDER BY wf.widgetid, wf.name, wf.value_int, wf.value_str, wf.value_groupid,'.
|
|
|
' wf.value_itemid, wf.value_graphid';
|
|
|
|
|
|
/**
|
|
|
* Create dashboards with widgets for test and define the corresponding dashboard ID.
|
|
|
*/
|
|
|
public static function prepareDashboardData() {
|
|
|
self::$slaid = CDBHelper::getValue('SELECT slaid FROM sla WHERE name='.zbx_dbstr(self::$monthly_sla));
|
|
|
|
|
|
$response = CDataHelper::call('dashboard.create', [
|
|
|
[
|
|
|
'name' => 'Dashboard for SLA report widget tests',
|
|
|
'private' => 0,
|
|
|
'auto_start' => 1,
|
|
|
'pages' => [
|
|
|
[
|
|
|
'name' => 'Page with widgets',
|
|
|
'widgets' => [
|
|
|
[
|
|
|
'type' => 'slareport',
|
|
|
'name' => self::$update_widget,
|
|
|
'width' => 12,
|
|
|
'height' => 8,
|
|
|
'fields' => [
|
|
|
[
|
|
|
'type' => 10,
|
|
|
'name' => 'slaid',
|
|
|
'value' => self::$slaid
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
'type' => 'slareport',
|
|
|
'name' => self::$delete_widget,
|
|
|
'x' => 0,
|
|
|
'y' => 8,
|
|
|
'width' => 12,
|
|
|
'height' => 8,
|
|
|
'fields' => [
|
|
|
[
|
|
|
'type' => 10,
|
|
|
'name' => 'slaid',
|
|
|
'value' => self::$slaid
|
|
|
]
|
|
|
]
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
'name' => self::$create_page,
|
|
|
'widgets' => []
|
|
|
]
|
|
|
]
|
|
|
]
|
|
|
]);
|
|
|
|
|
|
self::$dashboardid = $response['dashboardids'][0];
|
|
|
}
|
|
|
|
|
|
public function testDashboardSlaReportWidget_ConfigurationFormLayout() {
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
|
|
|
// Add a widget.
|
|
|
$dialog = CDashboardElement::find()->one()->edit()->addWidget();
|
|
|
$form = $dialog->asForm();
|
|
|
$form->fill(['Type' => CFormElement::RELOADABLE_FILL('SLA report')]);
|
|
|
$dialog->waitUntilReady();
|
|
|
|
|
|
$this->assertEquals(['Type', 'Show header', 'Name', 'Refresh interval', 'SLA', 'Service', 'Show periods', 'From', 'To'],
|
|
|
$form->getLabels()->asText()
|
|
|
);
|
|
|
$form->checkValue(['Show header' => true, 'Refresh interval' => 'Default (No refresh)']);
|
|
|
|
|
|
// Check attributes of input elements.
|
|
|
$inputs = [
|
|
|
'Name' => [
|
|
|
'maxlength' => 255,
|
|
|
'placeholder' => 'default'
|
|
|
],
|
|
|
'id:slaid_ms' => [
|
|
|
'placeholder' => 'type here to search',
|
|
|
'aria-required' => 'true'
|
|
|
],
|
|
|
'id:serviceid_ms' => [
|
|
|
'placeholder' => 'type here to search',
|
|
|
'aria-required' => 'false'
|
|
|
],
|
|
|
'Show periods' => [
|
|
|
'maxlength' => 3,
|
|
|
'value' => 20
|
|
|
],
|
|
|
'id:date_from' => [
|
|
|
'maxlength' => 255,
|
|
|
'placeholder' => 'YYYY-MM-DD'
|
|
|
],
|
|
|
'id:date_to' => [
|
|
|
'maxlength' => 255,
|
|
|
'placeholder' => 'YYYY-MM-DD'
|
|
|
]
|
|
|
];
|
|
|
|
|
|
foreach ($inputs as $field => $attributes) {
|
|
|
foreach ($attributes as $attribute => $value) {
|
|
|
$this->assertEquals($value, $form->getField($field)->getAttribute($attribute));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Check that the date pickers are present.
|
|
|
foreach (['id:date_from_calendar', 'id:date_to_calendar'] as $selector) {
|
|
|
$this->assertTrue($form->query($selector)->one()->isVisible());
|
|
|
}
|
|
|
|
|
|
// Check the list of available SLAs and services.
|
|
|
$sla_data = [
|
|
|
'field' => 'SLA',
|
|
|
'headers' => ['Name', 'Status'],
|
|
|
'column_data' => [
|
|
|
'Name' => [
|
|
|
'Disabled SLA',
|
|
|
'Disabled SLA Annual',
|
|
|
'SLA Annual',
|
|
|
'SLA Daily',
|
|
|
'SLA Monthly',
|
|
|
'SLA Quarterly',
|
|
|
'SLA Weekly',
|
|
|
'SLA with schedule and downtime',
|
|
|
'SLA для удаления - 頑張って', 'Update SLA'
|
|
|
],
|
|
|
'Status' => [
|
|
|
'Disabled',
|
|
|
'Disabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled',
|
|
|
'Enabled'
|
|
|
]
|
|
|
],
|
|
|
'table_selector' => 'xpath://form[@id="sla"]/table',
|
|
|
'buttons' => ['Cancel']
|
|
|
];
|
|
|
|
|
|
$service_data = [
|
|
|
'field' => 'Service',
|
|
|
'headers' => ['Name', 'Tags', 'Problem tags'],
|
|
|
'table_selector' => 'xpath://form[@name="services_form"]/table',
|
|
|
'buttons' => ['Filter', 'Reset', 'Cancel'],
|
|
|
'check_row' => [
|
|
|
'Name' => 'Simple actions service',
|
|
|
'Tags' => 'problem: falsetest: test789',
|
|
|
'Problem tags' => 'problem: true'
|
|
|
]
|
|
|
];
|
|
|
|
|
|
foreach ([$sla_data, $service_data] as $dialog_data) {
|
|
|
$this->checkDialogContents($dialog_data, true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function getSlaReportConfigurationFormData() {
|
|
|
return [
|
|
|
// Missing SLA.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'Service' => 'Service with problem'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => 'Invalid parameter "SLA": cannot be empty.'
|
|
|
]
|
|
|
],
|
|
|
// Non-numeric show periods.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Show periods' => 'abc'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => 'Invalid parameter "Show periods": value must be one of 1-100.'
|
|
|
]
|
|
|
],
|
|
|
// Too large value in show periods.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Show periods' => '101'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => 'Invalid parameter "Show periods": value must be one of 1-100.'
|
|
|
]
|
|
|
],
|
|
|
// Floating point value in show periods.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Show periods' => '0.5'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => 'Invalid parameter "Show periods": value must be one of 1-100.'
|
|
|
]
|
|
|
],
|
|
|
// Negative value in show periods.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Show periods' => '-5'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => 'Invalid parameter "Show periods": value must be one of 1-100.'
|
|
|
]
|
|
|
],
|
|
|
// String type From and To dates.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => 'yesterday',
|
|
|
'To' => 'today + 1 day'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => [
|
|
|
'Invalid parameter "From": a date is expected.',
|
|
|
'Invalid parameter "To": a date is expected.'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// Wrong From date and TO date format.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => '2022/01/01',
|
|
|
'To' => '2022/02/01'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => [
|
|
|
'Invalid parameter "From": a date is expected.',
|
|
|
'Invalid parameter "To": a date is expected.'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// From date and To date too far in the past.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => '1968-01-01',
|
|
|
'To' => '1969-10-10'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => [
|
|
|
'Incorrect value for field "From": a date is expected.',
|
|
|
'Incorrect value for field "To": a date is expected.'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// From date and To date too far in the future.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => '2040-01-01',
|
|
|
'To' => '2050-10-10'
|
|
|
],
|
|
|
'expected' => TEST_BAD,
|
|
|
'error' => [
|
|
|
'Incorrect value for field "From": a date is expected.',
|
|
|
'Incorrect value for field "To": a date is expected.'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// SLA report for disabled SLA without Service.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'Disabled SLA Annual'
|
|
|
],
|
|
|
'no_data' => true,
|
|
|
'expected' => 'SLA is disabled.'
|
|
|
]
|
|
|
],
|
|
|
// SLA report for disabled SLA with Service.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'Disabled SLA Annual',
|
|
|
'Service' => 'Service with problem'
|
|
|
],
|
|
|
'no_data' => true,
|
|
|
'expected' => 'SLA is disabled.'
|
|
|
]
|
|
|
]
|
|
|
];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dataProvider getSlaReportConfigurationFormData
|
|
|
* @dataProvider getSlaDataWithService
|
|
|
* @dataProvider getSlaDataWithoutService
|
|
|
*/
|
|
|
public function testDashboardSlaReportWidget_Create($data) {
|
|
|
$this->executeAction($data);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dataProvider getSlaReportConfigurationFormData
|
|
|
* @dataProvider getSlaDataWithService
|
|
|
* @dataProvider getSlaDataWithoutService
|
|
|
*/
|
|
|
public function testDashboardSlaReportWidget_Update($data) {
|
|
|
$this->executeAction($data, 'update');
|
|
|
}
|
|
|
|
|
|
public function testDashboardSlaReportWidget_SimpleUpdate() {
|
|
|
$initial_values = CDBHelper::getHash($this->sql);
|
|
|
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
$dashboard = CDashboardElement::find()->one();
|
|
|
$dashboard->edit();
|
|
|
|
|
|
$form = $dashboard->getWidget(self::$update_widget)->edit();
|
|
|
$form->submit();
|
|
|
|
|
|
// Wait for the widget to be loaded and save dashboard (wait implemented inside the getWidget method).
|
|
|
$dashboard->getWidget(self::$update_widget);
|
|
|
$dashboard->save();
|
|
|
|
|
|
$this->assertMessage(TEST_GOOD, 'Dashboard updated');
|
|
|
$this->assertEquals($initial_values, CDBHelper::getHash($this->sql));
|
|
|
}
|
|
|
|
|
|
public function getCancelActionsData() {
|
|
|
return [
|
|
|
// Cancel update widget.
|
|
|
[
|
|
|
[
|
|
|
'update' => true,
|
|
|
'save_widget' => true,
|
|
|
'save_dashboard' => false
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'update' => true,
|
|
|
'save_widget' => false,
|
|
|
'save_dashboard' => true
|
|
|
]
|
|
|
],
|
|
|
// Cancel create widget.
|
|
|
[
|
|
|
[
|
|
|
'save_widget' => true,
|
|
|
'save_dashboard' => false
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'save_widget' => false,
|
|
|
'save_dashboard' => true
|
|
|
]
|
|
|
]
|
|
|
];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dataProvider getCancelActionsData
|
|
|
*/
|
|
|
public function testDashboardSlaReportWidget_Cancel($data) {
|
|
|
$old_hash = CDBHelper::getHash($this->sql);
|
|
|
$new_name = 'Widget to be cancelled';
|
|
|
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
$dashboard = CDashboardElement::find()->one()->edit();
|
|
|
$old_widget_count = $dashboard->getWidgets()->count();
|
|
|
|
|
|
// Start updating or creating a widget.
|
|
|
if (CTestArrayHelper::get($data, 'update', false)) {
|
|
|
$form = $dashboard->getWidget(self::$update_widget)->edit();
|
|
|
}
|
|
|
else {
|
|
|
$form = $dashboard->addWidget()->asForm();
|
|
|
|
|
|
if ($form->getField('Type')->getValue() !== 'SLA report') {
|
|
|
$form->fill(['Type' => CFormElement::RELOADABLE_FILL('SLA report')]);
|
|
|
}
|
|
|
}
|
|
|
$form->fill([
|
|
|
'Name' => $new_name,
|
|
|
'Refresh interval' => '15 minutes',
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'Show periods' => '2',
|
|
|
'From' => '2022-01-01',
|
|
|
'To' => '2022-01-10'
|
|
|
]);
|
|
|
|
|
|
// Save or cancel widget.
|
|
|
if (CTestArrayHelper::get($data, 'save_widget', false)) {
|
|
|
$form->submit();
|
|
|
|
|
|
// Check that changes took place on the unsaved dashboard.
|
|
|
$this->assertTrue($dashboard->getWidget($new_name)->isVisible());
|
|
|
}
|
|
|
else {
|
|
|
$dialog = COverlayDialogElement::find()->one();
|
|
|
$dialog->query('button:Cancel')->one()->click();
|
|
|
$dialog->ensureNotPresent();
|
|
|
|
|
|
if (CTestArrayHelper::get($data, 'update', false)) {
|
|
|
foreach ([self::$update_widget => true, $new_name => false] as $name => $valid) {
|
|
|
$this->assertTrue($dashboard->getWidget($name, $valid)->isValid($valid));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$this->assertEquals($old_widget_count, $dashboard->getWidgets()->count());
|
|
|
}
|
|
|
// Save or cancel dashboard update.
|
|
|
if (CTestArrayHelper::get($data, 'save_dashboard', false)) {
|
|
|
$dashboard->save();
|
|
|
}
|
|
|
else {
|
|
|
$dashboard->cancelEditing();
|
|
|
}
|
|
|
// Confirm that no changes were made to the widget.
|
|
|
$this->assertEquals($old_hash, CDBHelper::getHash($this->sql));
|
|
|
}
|
|
|
|
|
|
public function testDashboardSlaReportWidget_Delete() {
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
$dashboard = CDashboardElement::find()->one()->edit();
|
|
|
$widget = $dashboard->getWidget(self::$delete_widget);
|
|
|
$dashboard->deleteWidget(self::$delete_widget);
|
|
|
$widget->waitUntilNotPresent();
|
|
|
|
|
|
$dashboard->save();
|
|
|
$this->assertMessage(TEST_GOOD, 'Dashboard updated');
|
|
|
// Confirm that widget is not present on dashboard.
|
|
|
$this->assertFalse($dashboard->getWidget(self::$delete_widget, false)->isValid());
|
|
|
$widget_sql = 'SELECT NULL FROM widget_field wf LEFT JOIN widget w ON w.widgetid=wf.widgetid'.
|
|
|
' WHERE w.name='.zbx_dbstr(self::$delete_widget);
|
|
|
$this->assertEquals(0, CDBHelper::getCount($widget_sql));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Perform SLA report widget creation or update and verify the result.
|
|
|
*
|
|
|
* @param array $data widget relate data from data provider.
|
|
|
* @param string $action string that specifies whether create or update action should be performed.
|
|
|
*/
|
|
|
private function executeAction($data, $action = 'create') {
|
|
|
$data['fields']['Name'] = 'SLA report '.microtime();
|
|
|
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
$dashboard = CDashboardElement::find()->one();
|
|
|
$dashboard->edit();
|
|
|
|
|
|
// Open SLA report widget configuration form.
|
|
|
if ($action === 'create') {
|
|
|
$dashboard->selectPage(self::$create_page);
|
|
|
|
|
|
$form = $dashboard->addWidget()->asForm();
|
|
|
|
|
|
if ($form->getField('Type')->getValue() !== 'SLA report') {
|
|
|
$form->fill(['Type' => CFormElement::RELOADABLE_FILL('SLA report')]);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
$form = $dashboard->getWidget(self::$update_widget)->edit();
|
|
|
// Assign default values for the fields originally not mentioned in data provider.
|
|
|
$data['fields'] = array_merge(self::$default_values, $data['fields']);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* In SLA report widget the number of returned periods is not limited only by Show periods value, and not
|
|
|
* by the creation date or current date. So to use the $reporting_periods array, Show periods should be filled.
|
|
|
*/
|
|
|
if (!array_key_exists('error', $data)
|
|
|
&& CTestArrayHelper::get($data['fields'], 'Service', '') === ''
|
|
|
&& !array_key_exists('no_data', $data)
|
|
|
&& in_array($data['reporting_period'], ['Monthly', 'Quarterly', 'Annually'])) {
|
|
|
$data['fields']['Show periods'] = count(self::$reporting_periods[$data['reporting_period']]);
|
|
|
}
|
|
|
|
|
|
// Type mode chooses the 1st entry in the list, which for some cases in data provider is incorrect.
|
|
|
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_SELECT);
|
|
|
$form->fill($data['fields']);
|
|
|
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_TYPE);
|
|
|
$form->submit();
|
|
|
|
|
|
if (CTestArrayHelper::get($data, 'expected', TEST_GOOD) === TEST_BAD) {
|
|
|
$this->assertMessage(TEST_BAD, null, $data['error']);
|
|
|
COverlayDialogElement::find()->one()->close();
|
|
|
$dashboard->save();
|
|
|
|
|
|
$this->page->waitUntilReady();
|
|
|
$this->assertFalse($dashboard->getWidget($data['fields']['Name'], false)->isValid());
|
|
|
}
|
|
|
else {
|
|
|
COverlayDialogElement::ensureNotPresent();
|
|
|
// Wait for the widget to be loaded and save dashboard (wait implemented inside the getWidget method).
|
|
|
$dashboard->getWidget($data['fields']['Name']);
|
|
|
$dashboard->save();
|
|
|
|
|
|
$this->assertMessage(TEST_GOOD, 'Dashboard updated');
|
|
|
|
|
|
if ($action === 'create') {
|
|
|
$dashboard->selectPage(self::$create_page);
|
|
|
}
|
|
|
else {
|
|
|
self::$update_widget = $data['fields']['Name'];
|
|
|
}
|
|
|
|
|
|
if (CTestArrayHelper::get($data['fields'], 'Service', '') === '') {
|
|
|
$this->checkLayoutWithoutService($data, true);
|
|
|
}
|
|
|
else {
|
|
|
$this->checkLayoutWithService($data, true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public function getSlaWidgetDataWithCustomDates() {
|
|
|
return [
|
|
|
// Daily with custom dates.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2020-02-28',
|
|
|
'To' => '2020-03-02'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2020-03-02',
|
|
|
'2020-03-01',
|
|
|
'2020-02-29',
|
|
|
'2020-02-28'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2021-06-29'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2021-07-18',
|
|
|
'2021-07-17',
|
|
|
'2021-07-16',
|
|
|
'2021-07-15',
|
|
|
'2021-07-14',
|
|
|
'2021-07-13',
|
|
|
'2021-07-12',
|
|
|
'2021-07-11',
|
|
|
'2021-07-10',
|
|
|
'2021-07-09',
|
|
|
'2021-07-08',
|
|
|
'2021-07-07',
|
|
|
'2021-07-06',
|
|
|
'2021-07-05',
|
|
|
'2021-07-04',
|
|
|
'2021-07-03',
|
|
|
'2021-07-02',
|
|
|
'2021-07-01',
|
|
|
'2021-06-30',
|
|
|
'2021-06-29'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2021-06-29',
|
|
|
'Show periods' => 7
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2021-07-05',
|
|
|
'2021-07-04',
|
|
|
'2021-07-03',
|
|
|
'2021-07-02',
|
|
|
'2021-07-01',
|
|
|
'2021-06-30',
|
|
|
'2021-06-29'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => '2021-06-29'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2021-06-29',
|
|
|
'2021-06-28',
|
|
|
'2021-06-27',
|
|
|
'2021-06-26',
|
|
|
'2021-06-25',
|
|
|
'2021-06-24',
|
|
|
'2021-06-23',
|
|
|
'2021-06-22',
|
|
|
'2021-06-21',
|
|
|
'2021-06-20',
|
|
|
'2021-06-19',
|
|
|
'2021-06-18',
|
|
|
'2021-06-17',
|
|
|
'2021-06-16',
|
|
|
'2021-06-15',
|
|
|
'2021-06-14',
|
|
|
'2021-06-13',
|
|
|
'2021-06-12',
|
|
|
'2021-06-11',
|
|
|
'2021-06-10'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => '2021-06-29',
|
|
|
'Show periods' => 7
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2021-06-29',
|
|
|
'2021-06-28',
|
|
|
'2021-06-27',
|
|
|
'2021-06-26',
|
|
|
'2021-06-25',
|
|
|
'2021-06-24',
|
|
|
'2021-06-23'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'yesterday'
|
|
|
],
|
|
|
'reporting_period' => 'Daily'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => 'yesterday - 1 day',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily'
|
|
|
]
|
|
|
],
|
|
|
// Oldest periods should be cut off if Show periods doesn't cover the whole From -> To period.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => '2022-06-01',
|
|
|
'To' => '2022-06-25'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2022-06-06',
|
|
|
'2022-06-07',
|
|
|
'2022-06-08',
|
|
|
'2022-06-09',
|
|
|
'2022-06-10',
|
|
|
'2022-06-11',
|
|
|
'2022-06-12',
|
|
|
'2022-06-13',
|
|
|
'2022-06-14',
|
|
|
'2022-06-15',
|
|
|
'2022-06-16',
|
|
|
'2022-06-17',
|
|
|
'2022-06-18',
|
|
|
'2022-06-19',
|
|
|
'2022-06-20',
|
|
|
'2022-06-21',
|
|
|
'2022-06-22',
|
|
|
'2022-06-23',
|
|
|
'2022-06-24',
|
|
|
'2022-06-25'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => '2022-06-01'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2022-06-01',
|
|
|
'2022-06-02',
|
|
|
'2022-06-03',
|
|
|
'2022-06-04',
|
|
|
'2022-06-05',
|
|
|
'2022-06-06',
|
|
|
'2022-06-07',
|
|
|
'2022-06-08',
|
|
|
'2022-06-09',
|
|
|
'2022-06-10',
|
|
|
'2022-06-11',
|
|
|
'2022-06-12',
|
|
|
'2022-06-13',
|
|
|
'2022-06-14',
|
|
|
'2022-06-15',
|
|
|
'2022-06-16',
|
|
|
'2022-06-17',
|
|
|
'2022-06-18',
|
|
|
'2022-06-19',
|
|
|
'2022-06-20'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => '2021-05-06'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'expected_periods' => [
|
|
|
'2021-04-17',
|
|
|
'2021-04-18',
|
|
|
'2021-04-19',
|
|
|
'2021-04-20',
|
|
|
'2021-04-21',
|
|
|
'2021-04-22',
|
|
|
'2021-04-23',
|
|
|
'2021-04-24',
|
|
|
'2021-04-25',
|
|
|
'2021-04-26',
|
|
|
'2021-04-27',
|
|
|
'2021-04-28',
|
|
|
'2021-04-29',
|
|
|
'2021-04-30',
|
|
|
'2021-05-01',
|
|
|
'2021-05-02',
|
|
|
'2021-05-03',
|
|
|
'2021-05-04',
|
|
|
'2021-05-05',
|
|
|
'2021-05-06'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => 'yesterday'
|
|
|
],
|
|
|
'reporting_period' => 'Daily'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'yesterday',
|
|
|
'Show periods' => 5
|
|
|
],
|
|
|
'reporting_period' => 'Daily'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2021-09-25',
|
|
|
'To' => '2021-10-04'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-10-03 – 10-09',
|
|
|
'2021-09-26 – 10-02',
|
|
|
'2021-09-19 – 09-25'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2021-09-25'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2022-01-30 – 02-05',
|
|
|
'2022-01-23 – 01-29',
|
|
|
'2022-01-16 – 01-22',
|
|
|
'2022-01-09 – 01-15',
|
|
|
'2022-01-02 – 01-08',
|
|
|
'2021-12-26 – 01-01',
|
|
|
'2021-12-19 – 12-25',
|
|
|
'2021-12-12 – 12-18',
|
|
|
'2021-12-05 – 12-11',
|
|
|
'2021-11-28 – 12-04',
|
|
|
'2021-11-21 – 11-27',
|
|
|
'2021-11-14 – 11-20',
|
|
|
'2021-11-07 – 11-13',
|
|
|
'2021-10-31 – 11-06',
|
|
|
'2021-10-24 – 10-30',
|
|
|
'2021-10-17 – 10-23',
|
|
|
'2021-10-10 – 10-16',
|
|
|
'2021-10-03 – 10-09',
|
|
|
'2021-09-26 – 10-02',
|
|
|
'2021-09-19 – 09-25'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2021-09-25',
|
|
|
'Show periods' => 4
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-10-10 – 10-16',
|
|
|
'2021-10-03 – 10-09',
|
|
|
'2021-09-26 – 10-02',
|
|
|
'2021-09-19 – 09-25'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2022-02-02'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2022-01-30 – 02-05',
|
|
|
'2022-01-23 – 01-29',
|
|
|
'2022-01-16 – 01-22',
|
|
|
'2022-01-09 – 01-15',
|
|
|
'2022-01-02 – 01-08',
|
|
|
'2021-12-26 – 01-01',
|
|
|
'2021-12-19 – 12-25',
|
|
|
'2021-12-12 – 12-18',
|
|
|
'2021-12-05 – 12-11',
|
|
|
'2021-11-28 – 12-04',
|
|
|
'2021-11-21 – 11-27',
|
|
|
'2021-11-14 – 11-20',
|
|
|
'2021-11-07 – 11-13',
|
|
|
'2021-10-31 – 11-06',
|
|
|
'2021-10-24 – 10-30',
|
|
|
'2021-10-17 – 10-23',
|
|
|
'2021-10-10 – 10-16',
|
|
|
'2021-10-03 – 10-09',
|
|
|
'2021-09-26 – 10-02',
|
|
|
'2021-09-19 – 09-25'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2022-02-02',
|
|
|
'Show periods' => 6
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2022-01-30 – 02-05',
|
|
|
'2022-01-23 – 01-29',
|
|
|
'2022-01-16 – 01-22',
|
|
|
'2022-01-09 – 01-15',
|
|
|
'2022-01-02 – 01-08',
|
|
|
'2021-12-26 – 01-01'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => 'today - 2 weeks'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => 'today - 2 weeks',
|
|
|
'Show periods' => 8
|
|
|
],
|
|
|
'reporting_period' => 'Weekly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'From' => '2021-12-29',
|
|
|
'To' => '2022-01-09'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-12-26 – 01-01',
|
|
|
'2022-01-02 – 01-08',
|
|
|
'2022-01-09 – 01-15'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'From' => '2021-12-29'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-12-26 – 01-01',
|
|
|
'2022-01-02 – 01-08',
|
|
|
'2022-01-09 – 01-15',
|
|
|
'2022-01-16 – 01-22',
|
|
|
'2022-01-23 – 01-29',
|
|
|
'2022-01-30 – 02-05',
|
|
|
'2022-02-06 – 02-12',
|
|
|
'2022-02-13 – 02-19',
|
|
|
'2022-02-20 – 02-26',
|
|
|
'2022-02-27 – 03-05',
|
|
|
'2022-03-06 – 03-12',
|
|
|
'2022-03-13 – 03-19',
|
|
|
'2022-03-20 – 03-26',
|
|
|
'2022-03-27 – 04-02',
|
|
|
'2022-04-03 – 04-09',
|
|
|
'2022-04-10 – 04-16',
|
|
|
'2022-04-17 – 04-23',
|
|
|
'2022-04-24 – 04-30',
|
|
|
'2022-05-01 – 05-07',
|
|
|
'2022-05-08 – 05-14'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'From' => '2021-12-29',
|
|
|
'Show periods' => 1
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-12-26 – 01-01'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'To' => '2021-06-01'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-01-17 – 01-23',
|
|
|
'2021-01-24 – 01-30',
|
|
|
'2021-01-31 – 02-06',
|
|
|
'2021-02-07 – 02-13',
|
|
|
'2021-02-14 – 02-20',
|
|
|
'2021-02-21 – 02-27',
|
|
|
'2021-02-28 – 03-06',
|
|
|
'2021-03-07 – 03-13',
|
|
|
'2021-03-14 – 03-20',
|
|
|
'2021-03-21 – 03-27',
|
|
|
'2021-03-28 – 04-03',
|
|
|
'2021-04-04 – 04-10',
|
|
|
'2021-04-11 – 04-17',
|
|
|
'2021-04-18 – 04-24',
|
|
|
'2021-04-25 – 05-01',
|
|
|
'2021-05-02 – 05-08',
|
|
|
'2021-05-09 – 05-15',
|
|
|
'2021-05-16 – 05-22',
|
|
|
'2021-05-23 – 05-29',
|
|
|
'2021-05-30 – 06-05'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'To' => '2021-06-01',
|
|
|
'Show periods' => 10
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'expected_periods' => [
|
|
|
'2021-03-28 – 04-03',
|
|
|
'2021-04-04 – 04-10',
|
|
|
'2021-04-11 – 04-17',
|
|
|
'2021-04-18 – 04-24',
|
|
|
'2021-04-25 – 05-01',
|
|
|
'2021-05-02 – 05-08',
|
|
|
'2021-05-09 – 05-15',
|
|
|
'2021-05-16 – 05-22',
|
|
|
'2021-05-23 – 05-29',
|
|
|
'2021-05-30 – 06-05'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'From' => 'today - 3 weeks',
|
|
|
'Show periods' => 11
|
|
|
],
|
|
|
'reporting_period' => 'Weekly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'To' => 'today - 3 weeks'
|
|
|
],
|
|
|
'reporting_period' => 'Weekly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2020-01-01',
|
|
|
'To' => '2020-02-29'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2020-02',
|
|
|
'2020-01'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2020-01-01'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2021-08',
|
|
|
'2021-07',
|
|
|
'2021-06',
|
|
|
'2021-05',
|
|
|
'2021-04',
|
|
|
'2021-03',
|
|
|
'2021-02',
|
|
|
'2021-01',
|
|
|
'2020-12',
|
|
|
'2020-11',
|
|
|
'2020-10',
|
|
|
'2020-09',
|
|
|
'2020-08',
|
|
|
'2020-07',
|
|
|
'2020-06',
|
|
|
'2020-05',
|
|
|
'2020-04',
|
|
|
'2020-03',
|
|
|
'2020-02',
|
|
|
'2020-01'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2020-01-01',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2020-03',
|
|
|
'2020-02',
|
|
|
'2020-01'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2023-02-15'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2023-02',
|
|
|
'2023-01',
|
|
|
'2022-12',
|
|
|
'2022-11',
|
|
|
'2022-10',
|
|
|
'2022-09',
|
|
|
'2022-08',
|
|
|
'2022-07',
|
|
|
'2022-06',
|
|
|
'2022-05',
|
|
|
'2022-04',
|
|
|
'2022-03',
|
|
|
'2022-02',
|
|
|
'2022-01',
|
|
|
'2021-12',
|
|
|
'2021-11',
|
|
|
'2021-10',
|
|
|
'2021-09',
|
|
|
'2021-08',
|
|
|
'2021-07'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2023-02-15',
|
|
|
'Show periods' => 4
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2023-02',
|
|
|
'2023-01',
|
|
|
'2022-12',
|
|
|
'2022-11'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => 'today - 2 months'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => 'today - 2 months',
|
|
|
'Show periods' => 6
|
|
|
],
|
|
|
'reporting_period' => 'Monthly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'From' => '2020-01-01',
|
|
|
'To' => '2020-02-29'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2020-01',
|
|
|
'2020-02'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'From' => '2020-01-01'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2020-01',
|
|
|
'2020-02',
|
|
|
'2020-03',
|
|
|
'2020-04',
|
|
|
'2020-05',
|
|
|
'2020-06',
|
|
|
'2020-07',
|
|
|
'2020-08',
|
|
|
'2020-09',
|
|
|
'2020-10',
|
|
|
'2020-11',
|
|
|
'2020-12',
|
|
|
'2021-01',
|
|
|
'2021-02',
|
|
|
'2021-03',
|
|
|
'2021-04',
|
|
|
'2021-05',
|
|
|
'2021-06',
|
|
|
'2021-07',
|
|
|
'2021-08'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'From' => '2020-01-01',
|
|
|
'Show periods' => 2
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2020-01',
|
|
|
'2020-02'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'To' => '2023-02-15'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2021-07',
|
|
|
'2021-08',
|
|
|
'2021-09',
|
|
|
'2021-10',
|
|
|
'2021-11',
|
|
|
'2021-12',
|
|
|
'2022-01',
|
|
|
'2022-02',
|
|
|
'2022-03',
|
|
|
'2022-04',
|
|
|
'2022-05',
|
|
|
'2022-06',
|
|
|
'2022-07',
|
|
|
'2022-08',
|
|
|
'2022-09',
|
|
|
'2022-10',
|
|
|
'2022-11',
|
|
|
'2022-12',
|
|
|
'2023-01',
|
|
|
'2023-02'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'To' => '2023-02-15',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2022-12',
|
|
|
'2023-01',
|
|
|
'2023-02'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'From' => 'today - 2 months',
|
|
|
'Show periods' => 5
|
|
|
],
|
|
|
'reporting_period' => 'Monthly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'To' => 'today - 2 months'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2021-05-01',
|
|
|
'To' => '2021-10-01'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2021-10 – 12',
|
|
|
'2021-07 – 09',
|
|
|
'2021-04 – 06'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2017-12-03'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2022-07 – 09',
|
|
|
'2022-04 – 06',
|
|
|
'2022-01 – 03',
|
|
|
'2021-10 – 12',
|
|
|
'2021-07 – 09',
|
|
|
'2021-04 – 06',
|
|
|
'2021-01 – 03',
|
|
|
'2020-10 – 12',
|
|
|
'2020-07 – 09',
|
|
|
'2020-04 – 06',
|
|
|
'2020-01 – 03',
|
|
|
'2019-10 – 12',
|
|
|
'2019-07 – 09',
|
|
|
'2019-04 – 06',
|
|
|
'2019-01 – 03',
|
|
|
'2018-10 – 12',
|
|
|
'2018-07 – 09',
|
|
|
'2018-04 – 06',
|
|
|
'2018-01 – 03',
|
|
|
'2017-10 – 12'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => '2021-02-10',
|
|
|
'Show periods' => 7
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2022-07 – 09',
|
|
|
'2022-04 – 06',
|
|
|
'2022-01 – 03',
|
|
|
'2021-10 – 12',
|
|
|
'2021-07 – 09',
|
|
|
'2021-04 – 06',
|
|
|
'2021-01 – 03'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2026-05-01'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2026-04 – 06',
|
|
|
'2026-01 – 03',
|
|
|
'2025-10 – 12',
|
|
|
'2025-07 – 09',
|
|
|
'2025-04 – 06',
|
|
|
'2025-01 – 03',
|
|
|
'2024-10 – 12',
|
|
|
'2024-07 – 09',
|
|
|
'2024-04 – 06',
|
|
|
'2024-01 – 03',
|
|
|
'2023-10 – 12',
|
|
|
'2023-07 – 09',
|
|
|
'2023-04 – 06',
|
|
|
'2023-01 – 03',
|
|
|
'2022-10 – 12',
|
|
|
'2022-07 – 09',
|
|
|
'2022-04 – 06',
|
|
|
'2022-01 – 03',
|
|
|
'2021-10 – 12',
|
|
|
'2021-07 – 09'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => '2026-05-01',
|
|
|
'Show periods' => 4
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2026-04 – 06',
|
|
|
'2026-01 – 03',
|
|
|
'2025-10 – 12',
|
|
|
'2025-07 – 09'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => 'first day of this month - 6 months'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => 'today',
|
|
|
'Show periods' => 6
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'From' => '2021-05-01',
|
|
|
'To' => '2021-10-01'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2021-04 – 06',
|
|
|
'2021-07 – 09',
|
|
|
'2021-10 – 12'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'From' => '2017-12-03'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2017-10 – 12',
|
|
|
'2018-01 – 03',
|
|
|
'2018-04 – 06',
|
|
|
'2018-07 – 09',
|
|
|
'2018-10 – 12',
|
|
|
'2019-01 – 03',
|
|
|
'2019-04 – 06',
|
|
|
'2019-07 – 09',
|
|
|
'2019-10 – 12',
|
|
|
'2020-01 – 03',
|
|
|
'2020-04 – 06',
|
|
|
'2020-07 – 09',
|
|
|
'2020-10 – 12',
|
|
|
'2021-01 – 03',
|
|
|
'2021-04 – 06',
|
|
|
'2021-07 – 09',
|
|
|
'2021-10 – 12',
|
|
|
'2022-01 – 03',
|
|
|
'2022-04 – 06',
|
|
|
'2022-07 – 09'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'From' => '2021-02-02',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2021-01 – 03',
|
|
|
'2021-04 – 06',
|
|
|
'2021-07 – 09'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'To' => '2026-05-01'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2021-07 – 09',
|
|
|
'2021-10 – 12',
|
|
|
'2022-01 – 03',
|
|
|
'2022-04 – 06',
|
|
|
'2022-07 – 09',
|
|
|
'2022-10 – 12',
|
|
|
'2023-01 – 03',
|
|
|
'2023-04 – 06',
|
|
|
'2023-07 – 09',
|
|
|
'2023-10 – 12',
|
|
|
'2024-01 – 03',
|
|
|
'2024-04 – 06',
|
|
|
'2024-07 – 09',
|
|
|
'2024-10 – 12',
|
|
|
'2025-01 – 03',
|
|
|
'2025-04 – 06',
|
|
|
'2025-07 – 09',
|
|
|
'2025-10 – 12',
|
|
|
'2026-01 – 03',
|
|
|
'2026-04 – 06'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'To' => '2022-10-01',
|
|
|
'Show periods' => 6
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'expected_periods' => [
|
|
|
'2021-07 – 09',
|
|
|
'2021-10 – 12',
|
|
|
'2022-01 – 03',
|
|
|
'2022-04 – 06',
|
|
|
'2022-07 – 09',
|
|
|
'2022-10 – 12'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'From' => 'first day of this month - 3 months',
|
|
|
'Show periods' => 4
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'To' => 'first day of this month - 1 month'
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2020-05-01',
|
|
|
'To' => '2025-12-31'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2025',
|
|
|
'2024',
|
|
|
'2023',
|
|
|
'2022',
|
|
|
'2021',
|
|
|
'2020'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2002-12-03'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2021',
|
|
|
'2020',
|
|
|
'2019',
|
|
|
'2018',
|
|
|
'2017',
|
|
|
'2016',
|
|
|
'2015',
|
|
|
'2014',
|
|
|
'2013',
|
|
|
'2012',
|
|
|
'2011',
|
|
|
'2010',
|
|
|
'2009',
|
|
|
'2008',
|
|
|
'2007',
|
|
|
'2006',
|
|
|
'2005',
|
|
|
'2004',
|
|
|
'2003',
|
|
|
'2002'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => '2012-12-03',
|
|
|
'Show periods' => 7
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2018',
|
|
|
'2017',
|
|
|
'2016',
|
|
|
'2015',
|
|
|
'2014',
|
|
|
'2013',
|
|
|
'2012'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => '2037-01-01'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2037',
|
|
|
'2036',
|
|
|
'2035',
|
|
|
'2034',
|
|
|
'2033',
|
|
|
'2032',
|
|
|
'2031',
|
|
|
'2030',
|
|
|
'2029',
|
|
|
'2028',
|
|
|
'2027',
|
|
|
'2026',
|
|
|
'2025',
|
|
|
'2024',
|
|
|
'2023',
|
|
|
'2022',
|
|
|
'2021',
|
|
|
'2020',
|
|
|
'2019',
|
|
|
'2018'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => '2037-01-01',
|
|
|
'Show periods' => 10
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2037',
|
|
|
'2036',
|
|
|
'2035',
|
|
|
'2034',
|
|
|
'2033',
|
|
|
'2032',
|
|
|
'2031',
|
|
|
'2030',
|
|
|
'2029',
|
|
|
'2028'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'today - 10 years'
|
|
|
],
|
|
|
'reporting_period' => 'Annually'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'today + 3 months',
|
|
|
'Show periods' => 4
|
|
|
],
|
|
|
'reporting_period' => 'Annually'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'From' => '2019-05-01',
|
|
|
'To' => '2024-10-01'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2019',
|
|
|
'2020',
|
|
|
'2021',
|
|
|
'2022',
|
|
|
'2023',
|
|
|
'2024'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'From' => '2002-12-03'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2002',
|
|
|
'2003',
|
|
|
'2004',
|
|
|
'2005',
|
|
|
'2006',
|
|
|
'2007',
|
|
|
'2008',
|
|
|
'2009',
|
|
|
'2010',
|
|
|
'2011',
|
|
|
'2012',
|
|
|
'2013',
|
|
|
'2014',
|
|
|
'2015',
|
|
|
'2016',
|
|
|
'2017',
|
|
|
'2018',
|
|
|
'2019',
|
|
|
'2020',
|
|
|
'2021'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'From' => '2022-12-03',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2022',
|
|
|
'2023',
|
|
|
'2024'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'To' => '2037-02-01'
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2018',
|
|
|
'2019',
|
|
|
'2020',
|
|
|
'2021',
|
|
|
'2022',
|
|
|
'2023',
|
|
|
'2024',
|
|
|
'2025',
|
|
|
'2026',
|
|
|
'2027',
|
|
|
'2028',
|
|
|
'2029',
|
|
|
'2030',
|
|
|
'2031',
|
|
|
'2032',
|
|
|
'2033',
|
|
|
'2034',
|
|
|
'2035',
|
|
|
'2036',
|
|
|
'2037'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'To' => '2037-02-01',
|
|
|
'Show periods' => 5
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'expected_periods' => [
|
|
|
'2033',
|
|
|
'2034',
|
|
|
'2035',
|
|
|
'2036',
|
|
|
'2037'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'From' => 'today - 6 months',
|
|
|
'Show periods' => 5
|
|
|
],
|
|
|
'reporting_period' => 'Annually'
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'To' => 'tomorrow'
|
|
|
],
|
|
|
'reporting_period' => 'Annually'
|
|
|
]
|
|
|
],
|
|
|
// Using non-complete date in From and To fields.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'From' => '2021',
|
|
|
'To' => '2021'
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'expected_periods' => [
|
|
|
'2021-01',
|
|
|
'2021-02',
|
|
|
'2021-03',
|
|
|
'2021-04',
|
|
|
'2021-05',
|
|
|
'2021-06',
|
|
|
'2021-07',
|
|
|
'2021-08',
|
|
|
'2021-09',
|
|
|
'2021-10',
|
|
|
'2021-11',
|
|
|
'2021-12'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'now',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => 'today'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// Months are excluded as strtotime() calculates month subtraction incorrectly on he last days on the month.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => 'now-1d-1w-1y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => 'today - 1 day - 1 week - 1 year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => 'now/d',
|
|
|
'Show periods' => 1
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => 'today'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'now/w',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => 'this week'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'From' => 'now/M'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => date('Y-m-d', strtotime('first day of this month'))
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'Service' => 'Service with problem',
|
|
|
'From' => 'now/y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => '1 January this Year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'today'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// Months are excluded as strtotime() calculates month subtraction incorrectly on he last days on the month.
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now-1d-1w-1y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'now - 1 day - 1 week - 1 year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now/d',
|
|
|
'Show periods' => 1
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'today'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now/w',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'next week -1 day'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now/M'
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => date('Y-m-d', strtotime('last day of this month'))
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Daily',
|
|
|
'To' => 'now/y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Daily',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => '31 December this Year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'From' => 'now/w-3w',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => 'this week - 3 weeks'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Weekly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => 'now/w+3w',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Weekly',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'next week -1 day + 3 weeks'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Monthly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'From' => 'now/M-1M',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Monthly',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => date('Y-m', strtotime('first day of this month')).' - 1 month'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
// TODO: uncomment the below case when ZBX-21821 is fixed.
|
|
|
// [
|
|
|
// [
|
|
|
// 'fields' => [
|
|
|
// 'SLA' => 'SLA Monthly',
|
|
|
// 'To' => 'now/M+1M',
|
|
|
// 'Show periods' => 3
|
|
|
// ],
|
|
|
// 'reporting_period' => 'Monthly',
|
|
|
// 'equivalent_timestamps' => [
|
|
|
// 'To' => date('Y-m', strtotime('last day of this month')).' + 1 month'
|
|
|
// ]
|
|
|
// ]
|
|
|
// ],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'From' => 'now/y-1y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => '1 January this year - 1 year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Annual',
|
|
|
'Service' => 'Service with problem',
|
|
|
'To' => 'now/y+1y',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Annually',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => '31 December this year + 1 year'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'From' => 'now/y+3M',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'equivalent_timestamps' => [
|
|
|
'From' => '1 January this year + 3 month'
|
|
|
]
|
|
|
]
|
|
|
],
|
|
|
[
|
|
|
[
|
|
|
'fields' => [
|
|
|
'SLA' => 'SLA Quarterly',
|
|
|
'Service' => 'Simple actions service',
|
|
|
'To' => 'now/d-100d',
|
|
|
'Show periods' => 3
|
|
|
],
|
|
|
'reporting_period' => 'Quarterly',
|
|
|
'equivalent_timestamps' => [
|
|
|
'To' => 'today - 100 days'
|
|
|
]
|
|
|
]
|
|
|
]
|
|
|
];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @dataProvider getSlaWidgetDataWithCustomDates
|
|
|
*/
|
|
|
public function testDashboardSlaReportWidget_UpdateWithCustomPeriods($data) {
|
|
|
// Construct the expected result array if such is not present in the data provider.
|
|
|
if (!array_key_exists('expected_periods', $data)) {
|
|
|
// If dynamic format is used in From and To fields, equivalent values are used for building the reference array.
|
|
|
$data_for_period = $data;
|
|
|
if (array_key_exists('equivalent_timestamps', $data)) {
|
|
|
foreach ($data_for_period['equivalent_timestamps'] as $field => $value) {
|
|
|
$data_for_period['fields'][$field] = $value;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
foreach ($this->getWidgetDateTimeData($data_for_period) as $period) {
|
|
|
$expected_periods[] = $period;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
$expected_periods = $data['expected_periods'];
|
|
|
}
|
|
|
|
|
|
$this->page->login()->open('zabbix.php?action=dashboard.view&dashboardid='.self::$dashboardid);
|
|
|
$dashboard = CDashboardElement::find()->one();
|
|
|
$dashboard->edit();
|
|
|
|
|
|
// Edit widget.
|
|
|
$form = $dashboard->getWidget(self::$update_widget)->edit();
|
|
|
|
|
|
// Assign default values for the fields originally not mentioned in data provider.
|
|
|
$data['fields'] = array_merge(self::$default_values, $data['fields']);
|
|
|
|
|
|
// Convert From and To field values to date if it is populated as string and not as a dynamic date.
|
|
|
if (!array_key_exists('expected_periods', $data) && !array_key_exists('equivalent_timestamps', $data)) {
|
|
|
foreach (['From', 'To'] as $field) {
|
|
|
if (CTestArrayHelper::get($data['fields'], $field)) {
|
|
|
$data['fields'][$field] = date('Y-m-d', strtotime($data['fields'][$field]));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Type mode chooses the 1st entry in the list, which for some cases in data provider is incorrect.
|
|
|
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_SELECT);
|
|
|
$form->fill($data['fields']);
|
|
|
CMultiselectElement::setDefaultFillMode(CMultiselectElement::MODE_TYPE);
|
|
|
$form->submit();
|
|
|
|
|
|
// Wait for the widget to be loaded and save dashboard (wait implemented inside the getWidget method).
|
|
|
$dashboard->getWidget(self::$update_widget);
|
|
|
$dashboard->save();
|
|
|
|
|
|
$this->assertMessage(TEST_GOOD, 'Dashboard updated');
|
|
|
|
|
|
$table = CDashboardElement::find()->one()->getWidget(self::$update_widget)->query('class:list-table')->asTable()->one();
|
|
|
|
|
|
if (CTestArrayHelper::get($data['fields'], 'Service') !== '') {
|
|
|
$this->assertTableDataColumn($expected_periods, self::$period_headers[$data['reporting_period']]);
|
|
|
}
|
|
|
else {
|
|
|
$headers = $table->getHeadersText();
|
|
|
|
|
|
unset($headers[0], $headers[1]);
|
|
|
$this->assertEquals($expected_periods, array_values($headers));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Build reference array with reporting periods based on report parameters and reporting period type.
|
|
|
* At first the last date that should be included in the report is obtained, and then $show_periods number of
|
|
|
* periods (from this date) is written into the reference array.
|
|
|
*
|
|
|
* @param array $data data provider
|
|
|
* @return array
|
|
|
*/
|
|
|
private function getWidgetDateTimeData($data) {
|
|
|
// By default the last 20 periods are displayed.
|
|
|
$show_periods = (array_key_exists('Show periods', $data['fields'])) ? $data['fields']['Show periods'] : 20;
|
|
|
|
|
|
if (array_key_exists('To', $data['fields'])) {
|
|
|
$to_date = $data['fields']['To'];
|
|
|
}
|
|
|
elseif (array_key_exists('From', $data['fields'])) {
|
|
|
$units = [
|
|
|
'Daily' => 'days',
|
|
|
'Weekly' => 'weeks',
|
|
|
'Monthly' => 'months',
|
|
|
'Quarterly' => 'months',
|
|
|
'Annually' => 'years'
|
|
|
];
|
|
|
$multiplier = ($data['reporting_period'] === 'Quarterly') ? 3 : 1;
|
|
|
|
|
|
$to_date = date('Y-m-d', strtotime($data['fields']['From'].' + '.($multiplier * ($show_periods - 1)).
|
|
|
' '.$units[$data['reporting_period']])
|
|
|
);
|
|
|
}
|
|
|
else {
|
|
|
$to_date = 'today';
|
|
|
}
|
|
|
|
|
|
switch ($data['reporting_period']) {
|
|
|
case 'Daily':
|
|
|
for ($i = 0; $i < $show_periods; $i++) {
|
|
|
$period_values[] = date('Y-m-d', strtotime($to_date.' '.-$i.' days'));
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case 'Weekly':
|
|
|
// Since in SLA report week starts on Sunday but in php - on Monday, use +1 week if to_date is Sunday.
|
|
|
$date_string = (date('l', strtotime($to_date)) === 'Sunday')
|
|
|
? 'this week this sunday'
|
|
|
: 'this week this sunday - 1 week';
|
|
|
|
|
|
for ($i = 0; $i < $show_periods; $i++) {
|
|
|
$start = strtotime($date_string, strtotime($to_date.' '.-$i.' weeks'));
|
|
|
$end = strtotime(date('M-d', $start).' + 6 days');
|
|
|
|
|
|
$period_values[] = date('Y-m-d', $start).' – '.date('m-d', $end);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case 'Monthly':
|
|
|
for ($i = 0; $i < $show_periods; $i++) {
|
|
|
$period_values[] = date('Y-m', strtotime(date('Y-m-01', strtotime($to_date)).' '.-$i.' month'));
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case 'Quarterly':
|
|
|
$quarters = ['01 – 03', '04 – 06', '07 – 09', '10 – 12'];
|
|
|
$to_year = date('Y', strtotime($to_date));
|
|
|
$to_month = date('m', strtotime($to_date));
|
|
|
|
|
|
// Calculate the year and the month from which the SLA should be displayed via month number in AD.
|
|
|
$months_total = 12 * $to_year + $to_month - 3 * ($show_periods - 1);
|
|
|
$from_year = floor($months_total/12);
|
|
|
$from_month = $months_total - $from_year * 12;
|
|
|
|
|
|
// In case there is no remaining months after division, then month is december and year should be reduced.
|
|
|
if ($from_month == 0) {
|
|
|
$from_month = 12;
|
|
|
$from_year--;
|
|
|
}
|
|
|
|
|
|
$i = 0;
|
|
|
for ($year = $to_year; $year >= $from_year; $year--) {
|
|
|
foreach (array_reverse($quarters) as $quarter) {
|
|
|
// Get the last and the first month of the quarter under attention.
|
|
|
$period_end = ltrim(stristr($quarter, '– '), '– ');
|
|
|
$period_start = substr($quarter, 0, strpos($quarter, " –"));
|
|
|
|
|
|
// Skip the quarters before the chronologically first quarter to be displayed in first year.
|
|
|
if ($year == $from_year && $period_end < $from_month) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// Write periods into reference array if period start is not later than the reports' last month.
|
|
|
if ($year < $to_year || ($year == $to_year && $period_start <= $to_month)) {
|
|
|
$period_values[] = $year.'-'.$quarter;
|
|
|
|
|
|
$i++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case 'Annually':
|
|
|
for ($i = 0; $i < $show_periods; $i++) {
|
|
|
$period_values[] = date('Y', strtotime($to_date.' '.-$i.' years'));
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
return (array_key_exists('Service', $data['fields'])) ? $period_values : array_reverse($period_values);
|
|
|
}
|
|
|
}
|