chg: [internal] Optimise afterFind and simplify ISODatetimeToUTC

pull/7894/head
Jakub Onderka 2021-10-28 13:19:20 +02:00
parent 97d6c1324b
commit 0d8292289d
4 changed files with 45 additions and 27 deletions

View File

@ -3142,6 +3142,18 @@ class AppModel extends Model
));
}
/**
* @param int $value Timestamp in microseconds
* @return string
*/
protected function microTimestampToIso($value)
{
$sec = (int)($value / 1000000);
$micro = $value % 1000000;
$micro = str_pad($micro, 6, "0", STR_PAD_LEFT);
return DateTime::createFromFormat('U.u', "$sec.$micro")->format('Y-m-d\TH:i:s.uP');
}
/**
* @return AttachmentTool
*/

View File

@ -353,7 +353,13 @@ class Attribute extends AppModel
public function afterFind($results, $primary = false)
{
foreach ($results as &$v) {
$v = $this->UTCToISODatetime($v, $this->alias);
$attribute = &$v['Attribute'];
if (!empty($attribute['first_seen'])) {
$attribute['first_seen'] = $this->microTimestampToIso($attribute['first_seen']);
}
if (!empty($attribute['last_seen'])) {
$attribute['last_seen'] = $this->microTimestampToIso($attribute['last_seen']);
}
}
return $results;
}
@ -1035,40 +1041,28 @@ class Attribute extends AppModel
// convert into utc and micro sec
if (!empty($data[$alias]['first_seen'])) {
$d = new DateTime($data[$alias]['first_seen'], new DateTimeZone('GMT'));
$fs_sec = $d->format('U');
$fs_micro = $d->format('u');
$fs_micro = str_pad($fs_micro, 6, "0", STR_PAD_LEFT);
$fs = $fs_sec . $fs_micro;
$data[$alias]['first_seen'] = $fs;
$data[$alias]['first_seen'] = $d->format('Uu');
}
if (!empty($data[$alias]['last_seen'])) {
$d = new DateTime($data[$alias]['last_seen'], new DateTimeZone('GMT'));
$ls_sec = $d->format('U');
$ls_micro = $d->format('u');
$ls_micro = str_pad($ls_micro, 6, "0", STR_PAD_LEFT);
$ls = $ls_sec . $ls_micro;
$data[$alias]['last_seen'] = $ls;
$data[$alias]['last_seen'] = $d->format('Uu');
}
return $data;
}
/**
* @param $data
* @param $alias
* @return array
* @deprecated
*/
public function UTCToISODatetime($data, $alias)
{
if (!empty($data[$alias]['first_seen'])) {
$fs = $data[$alias]['first_seen'];
$fs_sec = intval($fs / 1000000); // $fs is in micro (10^6)
$fs_micro = $fs % 1000000;
$fs_micro = str_pad($fs_micro, 6, "0", STR_PAD_LEFT);
$fs = $fs_sec . '.' . $fs_micro;
$data[$alias]['first_seen'] = DateTime::createFromFormat('U.u', $fs)->format('Y-m-d\TH:i:s.uP');
$data[$alias]['first_seen'] = $this->microTimestampToIso($data[$alias]['first_seen']);
}
if (!empty($data[$alias]['last_seen'])) {
$ls = $data[$alias]['last_seen'];
$ls_sec = intval($ls / 1000000); // $ls is in micro (10^6)
$ls_micro = $ls % 1000000;
$ls_micro = str_pad($ls_micro, 6, "0", STR_PAD_LEFT);
$ls = $ls_sec . '.' . $ls_micro;
$data[$alias]['last_seen'] = DateTime::createFromFormat('U.u', $ls)->format('Y-m-d\TH:i:s.uP');
$data[$alias]['last_seen'] = $this->microTimestampToIso($data[$alias]['last_seen']);
}
return $data;
}

View File

@ -243,8 +243,14 @@ class MispObject extends AppModel
public function afterFind($results, $primary = false)
{
foreach ($results as $k => $v) {
$results[$k] = $this->Attribute->UTCToISODatetime($results[$k], $this->alias);
foreach ($results as &$v) {
$object = &$v['Object'];
if (!empty($object['first_seen'])) {
$object['first_seen'] = $this->microTimestampToIso($object['first_seen']);
}
if (!empty($object['last_seen'])) {
$object['last_seen'] = $this->microTimestampToIso($object['last_seen']);
}
}
return $results;
}

View File

@ -354,8 +354,14 @@ class ShadowAttribute extends AppModel
public function afterFind($results, $primary = false)
{
foreach ($results as $k => $v) {
$results[$k] = $this->Attribute->UTCToISODatetime($results[$k], $this->alias);
foreach ($results as &$v) {
$proposal = &$v['ShadowAttribute'];
if (!empty($proposal['first_seen'])) {
$proposal['first_seen'] = $this->microTimestampToIso($proposal['first_seen']);
}
if (!empty($proposal['last_seen'])) {
$proposal['last_seen'] = $this->microTimestampToIso($proposal['last_seen']);
}
}
return $results;
}