error($_msg); exit($_msg); } // set-up the meta data arrays $metaFailedSessions = [ META_SESSION_MISC => $file, META_SESSION_IP => STRING_SESSION_HOME, META_CLIENT => CLIENT_SYSTEM, META_SESSION_DAEMON => 1, META_TEMPLATE => TEMPLATE_CLASS_FAILED_SESSIONS ]; $metaSession = [ META_SESSION_MISC => $file, META_SESSION_IP => STRING_SESSION_HOME, META_CLIENT => CLIENT_SYSTEM, META_SESSION_DAEMON => 1, META_TEMPLATE => TEMPLATE_CLASS_SESSIONS ]; $metaSysEv = [ META_SESSION_MISC => $file, META_SESSION_IP => STRING_SESSION_HOME, META_CLIENT => CLIENT_SYSTEM, META_TEMPLATE => TEMPLATE_CLASS_SYS_EVENTS ]; // validate the session record GUID passed as a CLI parameter to the program if (!empty($argv) and !empty($argv[1])) { $sessionGUID = $argv[1]; if (!validateGUID($sessionGUID)) { // if the eventGUID fails validation, then create a systemEvent and exit consoleLog($res, CON_ERROR, ERROR_INVALID_GUID . $sessionGUID); $eventData = [ MONGO_FAILED_EVENT_GUID => $sessionGUID, DB_CREATED => new MongoDate(), MONGO_FAILED_EVENT_NAME => MONGO_FAILED_EVENT_BAD_GUID, MONGO_FAILED_EVENT_DESC => sprintf(MONGO_FAILED_EVENT_BAD_GUID_DESC, $sessionGUID), MONGO_FAILED_EVENT_SEV => MONGO_FAILED_EVENT_SEV_LOW ]; /** @var gacMongoDB $feWidget */ if (!is_null($feWidget = grabWidget($meta, '', $errors))) { $feWidget->_createRecord([$eventData]); if (!$feWidget->status) { // saving the failed-session record failed $hdr = sprintf(INFO_LOC, $file, __LINE__); $msg = sprintf(ERROR_MDB_QUERY_FAIL, DB_EVENT_CREATE); logout($hdr . $msg); } } else { // todo -- post a new system event for the inability to create a failed session record $data = [ SYSTEM_EVENT_NAME => SYSEV_NAME_FAIL_TO_INIT . TEMPLATE_CLASS_SESSIONS, SYSTEM_EVENT_TYPE => SYSEV_TYPE_CLASS, SYSTEM_EVENT_CODE_LOC => $file . AT . __LINE__, SYSTEM_EVENT_META_DATA => $metaSysEv, ]; @postSystemEvent($data, $sessionGUID, $logger); logout(ERROR_FAILED_TO_INSTANTIATE . TEMPLATE_CLASS_SESSIONS); } } } else { $hdr = sprintf(INFO_LOC, $file, __LINE__); logout($hdr . ERROR_DATA_ARRAY_ARGV_EMPTY); } // next step: build the data payload for the tercero broker(sBroker) event to expire a session $request = [ BROKER_REQUEST => BROKER_REQUEST_EXPIRE_SESSION, BROKER_DATA => [ STRING_GUID_KEY => $sessionGUID, STRING_TOK_TYPE => STRING_TOK_TYPE_SES, SESSION_CUSTOM_FIELD => INFO_CLOSED_BY, SESSION_CUSTOM_VALUE => INFO_CLOSED_BY_EOS ], BROKER_META_DATA => [ META_TEMPLATE => TEMPLATE_CLASS_SESSIONS, META_CLIENT => CLIENT_SYSTEM, META_SESSION_DAEMON => 1, META_SESSION_MISC => basename(__FILE__) ] ]; // instantiate a tercero broker client $bc = new gacWorkQueueClient($file . AT . __LINE__, BROKER_QUEUE_S); if (!$bc->status) { // create a new failed-session event and exit $data = [ SYSTEM_EVENT_NAME => ERROR_BROKER_CLIENT_DECLARE . BROKER_QUEUE_S, SYSTEM_EVENT_TYPE => SYSEV_TYPE_CLASS, SYSTEM_EVENT_CODE_LOC => $file . AT . __LINE__, SYSTEM_EVENT_META_DATA => $metaSysEv, ]; /** @var gacMongoDB $feWidget */ if (is_null($feWidget = grabWidget($metaFailedSessions, '', $errors))) { logout(ERROR_FAILED_TO_INSTANTIATE . TEMPLATE_CLASS_FAILED_SESSIONS); } $feWidget->_createRecord([$data]); $hdr = sprintf(INFO_LOC, $file, __LINE__); logout($hdr. ERROR_BROKER_CLIENT_DECLARE . BROKER_QUEUE_S); } // publish the tercero request $bc->call(gzcompress(json_encode($request))); // tercero will publish an update event for the original system event record if the session record was successfully saved