From cc6f6b911c71cc34cb058177a84077960a9f4dd4 Mon Sep 17 00:00:00 2001 From: IndigoFox Date: Tue, 4 Apr 2023 15:18:44 -0700 Subject: [PATCH] move credentials to settings.json, use RVExtensionArgs call adds value type definitions for float/int, adds mission, server name, world name to sent metrics --- .../RangerMetrics/functions/fn_postInit.sqf | 48 +++++++++++---- .../addons/RangerMetrics/functions/fn_run.sqf | 2 +- .../RangerMetrics/functions/fn_send.sqf | 58 +++++++++---------- 3 files changed, 66 insertions(+), 42 deletions(-) diff --git a/@RangerMetrics/addons/RangerMetrics/functions/fn_postInit.sqf b/@RangerMetrics/addons/RangerMetrics/functions/fn_postInit.sqf index 5c5db4d..aef74b6 100644 --- a/@RangerMetrics/addons/RangerMetrics/functions/fn_postInit.sqf +++ b/@RangerMetrics/addons/RangerMetrics/functions/fn_postInit.sqf @@ -1,23 +1,47 @@ // function adapted from YAINA by MartinCo at http://yaina.eu -if !(isServer || !hasInterface) exitWith {}; +// if (!isServer) exitWith {}; _cba = (isClass(configFile >> "CfgPatches" >> "cba_main")); +RangerMetrics_debug = true; + [format ["Instance name: %1", profileName]] call RangerMetrics_fnc_log; [format ["CBA detected: %1", _cba]] call RangerMetrics_fnc_log; ["Initializing v1.1"] call RangerMetrics_fnc_log; -RangerMetrics_run = true; +// _extData = "RangerMetrics" callExtension "loadSettings"; +// if (_extData == "0") exitWith { +// ["Extension not found, disabling"] call RangerMetrics_fnc_log; +// RangerMetrics_run = false; +// }; -if(_cba) then { // CBA is running, use PFH - [RangerMetrics_fnc_run, 10, [_cba]] call CBA_fnc_addPerFrameHandler; -} else { // CBA isn't running, use sleep - [_cba] spawn { - params ["_cba"]; - while{true} do { - [[_cba]] call RangerMetrics_fnc_run; // nested to match CBA PFH signature - sleep 10; - }; +// _extData = parseSimpleArray _extData; +// RangerMetrics_settingsDir = _extData select 0; +// RangerMetrics_settingsLoaded = _extData select 1; +// RangerMetrics_influxURL = _extData select 2; + +// [format["InfluxDB URL: %1", RangerMetrics_influxURL]] call RangerMetrics_fnc_log; +// _extVersion = "RangerMetrics" callExtension "version"; +// ["Extension version: " + _extVersion] call RangerMetrics_fnc_log; + +addMissionEventHandler ["ExtensionCallback", { + params ["_name", "_function", "_data"]; + if (_name == "RangerMetrics") then { + [parseSimpleArray _data] call RangerMetrics_fnc_log; }; -}; +}]; + +// RangerMetrics_run = true; + +// if(_cba) then { // CBA is running, use PFH +// [RangerMetrics_fnc_run, 10, [_cba]] call CBA_fnc_addPerFrameHandler; +// } else { // CBA isn't running, use sleep +// [_cba] spawn { +// params ["_cba"]; +// while{true} do { +// [[_cba]] call RangerMetrics_fnc_run; // nested to match CBA PFH signature +// sleep 10; +// }; +// }; +// }; diff --git a/@RangerMetrics/addons/RangerMetrics/functions/fn_run.sqf b/@RangerMetrics/addons/RangerMetrics/functions/fn_run.sqf index 61d524e..26e736a 100644 --- a/@RangerMetrics/addons/RangerMetrics/functions/fn_run.sqf +++ b/@RangerMetrics/addons/RangerMetrics/functions/fn_run.sqf @@ -46,7 +46,7 @@ if(missionNamespace getVariable ["RangerMetrics_run",false]) then { private _headlessClients = entities "HeadlessClient_F"; { { - private _stats_fps = round diag_fps; + private _stats_fps = diag_fps; ["stats.HCfps", "float", _stats_fps] remoteExec ["RangerMetrics_fnc_send", 2]; } remoteExecCall ["bis_fnc_call", owner _x]; diff --git a/@RangerMetrics/addons/RangerMetrics/functions/fn_send.sqf b/@RangerMetrics/addons/RangerMetrics/functions/fn_send.sqf index 1652408..90286f1 100644 --- a/@RangerMetrics/addons/RangerMetrics/functions/fn_send.sqf +++ b/@RangerMetrics/addons/RangerMetrics/functions/fn_send.sqf @@ -1,38 +1,37 @@ -params ["_metric", "_value", ["_global", false]]; +params ["_metric", "_valueType", "_value", ["_global", false]]; private _profileName = profileName; private _prefix = "Arma3"; +private _locality = [profileName, "global"] select _global; +// InfluxDB settings +// private _connection = "http://indifox.info:8086"; +// private _token = "BwOzapPBLZ-lhtrcs3PC2Jk2p7plCC0UckHKxe8AxulYkk9St1q2aloXMW2rDD4X2ufIkx3fwSbEe6ZeJo8ljg=="; +// private _org = "ranger-metrics"; +// private _bucket = "ranger-metrics"; -private _environmentMeta = [missionName, worldName, serverName]; - -private _metricPath = [ - format["%1,%2,%3,%4,%5", - _profileName, - profileName, - missionName, worldName, serverName - ], - format["%1,%2,%3,%4,%5", - _profileName, - "global", - missionName, worldName, serverName - ] -] select _global; - -// InfluDB settings -private _connection = "http://INFLUX_URL:8086"; -private _token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX_AUTH_TOKEN_XXXXXXXXXXXXXXXXXXXXXXXXXXX"; -private _org = "XXX_INFLUX_ORG_XXXXXX"; -private _bucket = "XXX_BUCKET_NAME"; - -private _extSend = format["%1,%2", format["%1,%2,%3,%4,%5,%6", _connection, _token, _org, _bucket, _metricPath, _metric], _value]; +// private _extSend = format["%1,%2", format["%1,%2,%3,%4,%5,%6", _connection, _token, _org, _bucket, _metricPath, _metric], _value]; +private _extSend = [ + // _connection, + // _token, + // _org, + // _bucket, + _profileName, + _locality, + missionName, + worldName, + serverName, + _metric, + _valueType, + _value +]; if(missionNamespace getVariable ["RangerMetrics_debug",false]) then { [format ["Sending a3influx data: %1", _extSend], "DEBUG"] call RangerMetrics_fnc_log; }; // send the data -private _return = "RangerMetrics" callExtension _extSend; +private _return = "RangerMetrics" callExtension ["sendToInflux", _extSend]; // shouldn't be possible, the extension should always return even if error if(isNil "_return") exitWith { @@ -41,14 +40,15 @@ if(isNil "_return") exitWith { }; // extension error codes -if(_return in ["invalid metric value","malformed, could not find separator"] ) exitWith { - [format ["%1 (%2)", _return, _extSend], "ERROR"] call RangerMetrics_fnc_log; - false -}; +// if(_return in ["invalid metric value","malformed, could not find separator"] ) exitWith { +// [format ["%1 (%2)", _return, _extSend], "ERROR"] call RangerMetrics_fnc_log; +// false +// }; // success, only show if debug is set if(missionNamespace getVariable ["RangerMetrics_debug",false]) then { - _returnArgs = _return splitString (toString [10,32]); + // _returnArgs = _return splitString (toString [10,32]); + _returnArgs = parseSimpleArray _return; [format ["a3influx return data: %1",_returnArgs], "DEBUG"] call RangerMetrics_fnc_log; };