diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php
index f0af58f0f9..4018a80036 100644
--- a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php
+++ b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php
@@ -28,6 +28,33 @@ final class EventsHistory extends Item
protected static $useLinkedVisualConsole = true;
+ /**
+ * Validate the received data structure to ensure if we can extract the
+ * values required to build the model.
+ *
+ * @param array $data Input data.
+ *
+ * @return void
+ *
+ * @throws \InvalidArgumentException If any input value is considered
+ * invalid.
+ *
+ * @overrides Item::validateData.
+ */
+ protected function validateData(array $data): void
+ {
+ parent::validateData($data);
+
+ if (static::notEmptyStringOr($data['encodedHtml'], null) === null
+ && static::notEmptyStringOr($data['html'], null) === null
+ ) {
+ throw new \InvalidArgumentException(
+ 'the html property is required and should be string'
+ );
+ }
+ }
+
+
/**
* Returns a valid representation of the model.
*
@@ -54,7 +81,7 @@ final class EventsHistory extends Item
*
* @return mixed The time in seconds of the graph period or null.
*/
- private function extractMaxTime(array $data)
+ private static function extractMaxTime(array $data)
{
return static::parseIntOr(
static::issetInArray($data, ['maxTime', 'period']),
@@ -69,15 +96,36 @@ final class EventsHistory extends Item
* @param array $data Unknown input data structure.
*
* @return string The HTML representation in base64 encoding.
- * @throws \InvalidArgumentException When an agent Id cannot be found.
*/
- private function extractEncodedHtml(array $data): string
+ private static function extractEncodedHtml(array $data): string
{
if (isset($data['encodedHtml']) === true) {
return $data['encodedHtml'];
} else if (isset($data['html']) === true) {
return \base64_encode($data['html']);
}
+ }
+
+
+ /**
+ * Fetch a vc item data structure from the database using a filter.
+ *
+ * @param array $filter Filter of the Visual Console Item.
+ *
+ * @return array The Visual Console Item data structure stored into the DB.
+ * @throws \InvalidArgumentException When an agent Id cannot be found.
+ *
+ * @override Item::fetchDataFromDB.
+ */
+ protected static function fetchDataFromDB(array $filter): array
+ {
+ // Due to this DB call, this function cannot be unit tested without
+ // a proper mock.
+ $data = parent::fetchDataFromDB($filter);
+
+ /*
+ * Retrieve extra data.
+ */
// Load side libraries.
global $config;
@@ -99,13 +147,15 @@ final class EventsHistory extends Item
$moduleId,
(int) $data['width'],
(int) $data['height'],
- $this->extractMaxTime($data),
+ static::extractMaxTime($data),
'',
true
);
$html .= '';
- return \base64_encode($html);
+ $data['encodedHtml'] = \base64_encode($html);
+
+ return $data;
}
diff --git a/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php b/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php
index cc0e937c52..3bd8e65949 100644
--- a/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php
+++ b/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php
@@ -28,7 +28,7 @@ class EventsHistoryTest extends TestCase
'width' => '600',
'height' => '500',
'maxTime' => null,
- 'data' => [],
+ 'html' => '
Foo
',
]
)
);
@@ -37,15 +37,12 @@ class EventsHistoryTest extends TestCase
EventsHistory::class,
EventsHistory::fromArray(
[
- 'id' => 14,
- 'type' => AUTO_SLA_GRAPH,
- 'width' => '600',
- 'height' => '500',
- 'maxTime' => 12800,
- 'data' => [
- 'data' => '5',
- 'time' => 23456788,
- ],
+ 'id' => 14,
+ 'type' => AUTO_SLA_GRAPH,
+ 'width' => '600',
+ 'height' => '500',
+ 'maxTime' => 12800,
+ 'encodedHtml' => 'PGgxPkZvbzwvaDE+',
]
)
);
@@ -60,7 +57,7 @@ class EventsHistoryTest extends TestCase
public function testContainerIsRepresentedAsJson(): void
{
$this->assertEquals(
- '{"aclGroupId":null,"agentId":null,"agentName":null,"data":[],"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
+ '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
(string) EventsHistory::fromArray(
[
'id' => 7,
@@ -75,13 +72,13 @@ class EventsHistoryTest extends TestCase
'x' => -666,
'y' => 76,
'maxTime' => null,
- 'data' => [],
+ 'html' => 'Foo
',
]
)
);
$this->assertEquals(
- '{"aclGroupId":null,"agentId":null,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":12800,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
+ '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":12800,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
(string) EventsHistory::fromArray(
[
'id' => 7,
@@ -96,16 +93,13 @@ class EventsHistoryTest extends TestCase
'x' => -666,
'y' => 76,
'maxTime' => 12800,
- 'data' => [
- 'time' => 23456789,
- 'data' => 15,
- ],
+ 'encodedHtml' => 'PGgxPkZvbzwvaDE+',
]
)
);
$this->assertEquals(
- '{"aclGroupId":null,"agentId":null,"agentName":null,"data":[],"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":1,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
+ '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":1,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
(string) EventsHistory::fromArray(
[
'id' => 7,
@@ -120,14 +114,14 @@ class EventsHistoryTest extends TestCase
'x' => -666,
'y' => 76,
'maxTime' => null,
- 'data' => [],
+ 'encodedHtml' => 'PGgxPkZvbzwvaDE+',
'id_layout_linked' => 1,
]
)
);
$this->assertEquals(
- '{"aclGroupId":null,"agentId":null,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":3,"linkedLayoutId":2,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":5,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
+ '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":3,"linkedLayoutId":2,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":5,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}',
(string) EventsHistory::fromArray(
[
'id' => 7,
@@ -142,10 +136,7 @@ class EventsHistoryTest extends TestCase
'x' => -666,
'y' => 76,
'maxTime' => 12800,
- 'data' => [
- 'time' => 23456789,
- 'data' => 15,
- ],
+ 'encodedHtml' => 'PGgxPkZvbzwvaDE+',
'id_metaconsole' => 5,
'linked_layout_node_id' => 3,
'linkedLayoutId' => 2,
@@ -154,7 +145,7 @@ class EventsHistoryTest extends TestCase
);
$this->assertEquals(
- '{"aclGroupId":null,"agentId":21,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":15,"linkedLayoutId":3,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":2,"moduleId":385,"moduleName":"module_test","parentId":null,"type":14,"width":0,"x":-666,"y":76}',
+ '{"aclGroupId":null,"agentId":21,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":15,"linkedLayoutId":3,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":2,"moduleId":385,"moduleName":"module_test","parentId":null,"type":14,"width":0,"x":-666,"y":76}',
(string) EventsHistory::fromArray(
[
'id' => 7,
@@ -169,10 +160,7 @@ class EventsHistoryTest extends TestCase
'x' => -666,
'y' => 76,
'maxTime' => 12800,
- 'data' => [
- 'time' => 23456789,
- 'data' => 15,
- ],
+ 'encodedHtml' => 'PGgxPkZvbzwvaDE+',
'id_metaconsole' => 2,
'linked_layout_node_id' => 15,
'linkedLayoutId' => 3,