initial modifications, needs testing
This commit is contained in:
@@ -70,11 +70,9 @@ class CfgFunctions {
|
||||
class postInit { postInit = 1; };
|
||||
class captureLoop {};
|
||||
class log {};
|
||||
class queue {};
|
||||
class send {};
|
||||
class sendClientPoll {};
|
||||
class startServerPoll {};
|
||||
class classHandlers {};
|
||||
class initCapture {};
|
||||
};
|
||||
class helpers {
|
||||
|
||||
@@ -30,14 +30,6 @@ try {
|
||||
|
||||
|
||||
switch (_function) do {
|
||||
case "deinitExtension": {
|
||||
// Our first call is deinitExtension. When we received a single "true" value, we can then run init processes for the extension connections.
|
||||
if ((_response select 0) isEqualTo true) then {
|
||||
"RangerMetrics" callExtension "initExtension";
|
||||
} else {
|
||||
_response call RangerMetrics_fnc_log;
|
||||
};
|
||||
};
|
||||
case "loadSettingsJSON": {
|
||||
[_function, _response] call RangerMetrics_callback_fnc_loadSettings;
|
||||
};
|
||||
|
||||
@@ -38,7 +38,7 @@ switch (_data select 0) do {
|
||||
"Setting loaded: %1",
|
||||
_data
|
||||
],
|
||||
"INFO"
|
||||
"DEBUG"
|
||||
] call RangerMetrics_fnc_log;
|
||||
|
||||
};
|
||||
@@ -46,7 +46,7 @@ switch (_data select 0) do {
|
||||
default {
|
||||
[
|
||||
_data select 0,
|
||||
"INFO"
|
||||
"DEBUG"
|
||||
] call RangerMetrics_fnc_log;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ private _allPlayers = call BIS_fnc_listPlayers;
|
||||
(_x isKindOf "WeaponHolderSimulated")
|
||||
} count _vehicles]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
// Number of local units
|
||||
[
|
||||
@@ -73,7 +73,7 @@ private _allPlayers = call BIS_fnc_listPlayers;
|
||||
(_x isKindOf "WeaponHolderSimulated")
|
||||
} count _vehicles]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
// Number of global units - only track on server
|
||||
if (isServer) then {
|
||||
@@ -109,7 +109,7 @@ private _allPlayers = call BIS_fnc_listPlayers;
|
||||
!alive _x
|
||||
} count _allPlayers]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
};
|
||||
|
||||
} forEach [east, west, independent, civilian];
|
||||
@@ -129,5 +129,5 @@ if (isServer) then {
|
||||
} else {false}
|
||||
} count _allPlayers]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
};
|
||||
@@ -161,7 +161,7 @@ private _propertyValues = createHashMap;
|
||||
["category", _measurementCategory]
|
||||
],
|
||||
_fieldsWithType
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
} forEach _propertyValues;
|
||||
|
||||
|
||||
|
||||
@@ -80,4 +80,4 @@ if (_roleDescription isNotEqualTo "") then {
|
||||
],
|
||||
_fields,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -20,6 +20,6 @@ private _settings = RangerMetrics_recordingSettings get "playerPerformance";
|
||||
["float", "desync", _desync]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
} forEach (allUsers apply {getUserInfo _x});
|
||||
|
||||
|
||||
@@ -15,4 +15,4 @@ private _settings = RangerMetrics_recordingSettings get "playerStatus";
|
||||
["string", "profileName", _profileName]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -25,4 +25,4 @@ private _settings = RangerMetrics_recordingSettings get "runningMission";
|
||||
|
||||
],
|
||||
["profile", "server", "world"] // context
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -17,4 +17,4 @@ private _settings = RangerMetrics_recordingSettings get "runningScripts";
|
||||
} else {0}
|
||||
]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -8,4 +8,4 @@ private _settings = RangerMetrics_recordingSettings get "serverPerformance";
|
||||
nil, [
|
||||
["float", "fps_avg", diag_fps toFixed 2],
|
||||
["float", "fps_min", diag_fpsMin toFixed 2]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
@@ -12,4 +12,4 @@ private _settings = RangerMetrics_recordingSettings get "serverTime";
|
||||
["float", "timeMultiplier", timeMultiplier toFixed 2],
|
||||
["float", "accTime", accTime toFixed 2]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -51,7 +51,7 @@ if (_unitId isEqualTo -1) exitWith {false};
|
||||
],
|
||||
_classItemCounts,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
// prep displayName by fetching from configs
|
||||
_displayItemCounts = [];
|
||||
@@ -91,7 +91,7 @@ _displayItemCounts = [];
|
||||
],
|
||||
_displayItemCounts,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
true;
|
||||
|
||||
@@ -186,7 +186,7 @@ true;
|
||||
// ],
|
||||
// _x,
|
||||
// ["server"]
|
||||
// ] call RangerMetrics_fnc_queue;
|
||||
// ] call RangerMetrics_fnc_send;
|
||||
// } forEach [
|
||||
// _primaryWeapon,
|
||||
// _secondaryWeapon,
|
||||
|
||||
@@ -78,4 +78,4 @@ private _playerTraits = getAllUnitTraits _unit;
|
||||
],
|
||||
_fields,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -10,4 +10,4 @@ private _settings = RangerMetrics_recordingSettings get "viewDistance";
|
||||
["float", "objectViewDistance", getObjectViewDistance # 0],
|
||||
["float", "viewDistance", viewDistance]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -20,4 +20,4 @@ private _settings = RangerMetrics_recordingSettings get "weather";
|
||||
["float", "moonPhase", moonPhase date],
|
||||
["float", "sunOrMoon", sunOrMoon]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -40,4 +40,4 @@ if (name _killed != "") then {
|
||||
_tags,
|
||||
_fields,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -30,4 +30,4 @@ private _unitPlayerUID = _userInfo select 2;
|
||||
["float", "damage", _damage]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -24,4 +24,4 @@ private _userInfo = getUserInfo _unitPlayerId;
|
||||
["string", "vehicleClass", typeOf _vehicle]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -37,4 +37,4 @@ if (_playerUID isNotEqualTo "") then {
|
||||
nil,
|
||||
_fields,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -27,4 +27,4 @@ if (_ownerUID isEqualTo "") exitWith {};
|
||||
["string", "owner", _ownerUID]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -28,4 +28,4 @@ if (_ownerUID isEqualTo "") then {
|
||||
["string", "owner", _ownerUID]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
@@ -16,5 +16,5 @@ private _markerData = _marker call BIS_fnc_markerToString;
|
||||
["string", "marker", _markerData]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
|
||||
@@ -17,6 +17,6 @@ if (_unitUID isEqualTo "") exitWith {false};
|
||||
["float", "health", 1 - (damage _unit)],
|
||||
["bool", "state", _unconscious]
|
||||
]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
true;
|
||||
@@ -14,4 +14,4 @@ private _settings = RangerMetrics_recordingSettings get "CBAEventHandlers" get "
|
||||
nil,
|
||||
_fields,
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
@@ -13,7 +13,7 @@
|
||||
["string", "networkId", _networkId],
|
||||
["int", "clientStateNumber", _clientStateNumber],
|
||||
["string", "clientState", _clientState]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) OnUserConnected fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["OnUserDisconnected", {
|
||||
@@ -30,7 +30,7 @@
|
||||
["string", "networkId", _networkId],
|
||||
["int", "clientStateNumber", _clientStateNumber],
|
||||
["string", "clientState", _clientState]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) OnUserDisconnected fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["PlayerConnected", {
|
||||
@@ -48,7 +48,7 @@
|
||||
["bool", "jip", _jip],
|
||||
["int", "owner", _owner],
|
||||
["string", "idstr", _idstr]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) PlayerConnected fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["HandleDisconnect", {
|
||||
@@ -64,7 +64,7 @@
|
||||
["string", "id", _id toFixed 0],
|
||||
["string", "uid", _uid],
|
||||
["string", "name", _name]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) HandleDisconnect fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
false;
|
||||
}],
|
||||
@@ -78,7 +78,7 @@
|
||||
["string", "networkId", _networkId],
|
||||
["int", "clientStateNumber", _clientStateNumber],
|
||||
["string", "clientState", _clientState]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) OnUserClientStateChanged fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["OnUserAdminStateChanged", {
|
||||
@@ -92,7 +92,7 @@
|
||||
["string", "networkId", _networkId],
|
||||
["bool", "loggedIn", _loggedIn],
|
||||
["bool", "votedIn", _votedIn]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) OnUserAdminStateChanged fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["OnUserKicked", {
|
||||
@@ -109,7 +109,7 @@
|
||||
["string", "kickType", _kickType],
|
||||
["string", "kickReason", _kickReason],
|
||||
["string", "kickMessageIncReason", _kickMessageIncReason]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
[format ["(EventHandler) OnUserKicked fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
["HandleChatMessage", {
|
||||
@@ -124,7 +124,7 @@
|
||||
["server_events", "MPEnded", nil, [
|
||||
["string", "winner", _winner],
|
||||
["string", "reason", _reason]
|
||||
]] call RangerMetrics_fnc_queue;
|
||||
]] call RangerMetrics_fnc_send;
|
||||
call RangerMetrics_capture_fnc_running_mission;
|
||||
[format ["(EventHandler) MPEnded fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
}],
|
||||
@@ -196,7 +196,7 @@
|
||||
// ["bool", "autoSupply", _autoSupply]
|
||||
// ],
|
||||
// nil
|
||||
// ] call RangerMetrics_fnc_queue;
|
||||
// ] call RangerMetrics_fnc_send;
|
||||
// [format["(EventHandler) Service fired: %1", _this], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
// }]
|
||||
]
|
||||
@@ -69,7 +69,7 @@ if (RangerMetrics_aceMedicalPresent) then {
|
||||
// ["string", "projectile", _projectile]
|
||||
// ],
|
||||
// ["server"]
|
||||
// ] call RangerMetrics_fnc_queue;
|
||||
// ] call RangerMetrics_fnc_send;
|
||||
|
||||
// [_unit] call RangerMetrics_capture_fnc_unit_state;
|
||||
// }];
|
||||
@@ -103,7 +103,7 @@ _handle = _unit addEventHandler ["GetInMan", {
|
||||
["string", "turret", _turret]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
[_unit] call RangerMetrics_capture_fnc_unit_state;
|
||||
}];
|
||||
@@ -133,7 +133,7 @@ _handle = _unit addEventHandler ["GetOutMan", {
|
||||
["string", "turret", _turret]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
[_unit] call RangerMetrics_capture_fnc_unit_state;
|
||||
}];
|
||||
@@ -163,7 +163,7 @@ _handle = _unit addEventHandler ["HandleScore", {
|
||||
["string", "object", [configOf _object] call BIS_fnc_displayName]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
nil;
|
||||
}];
|
||||
@@ -192,7 +192,7 @@ _handle = _unit addEventHandler ["InventoryClosed", {
|
||||
["string", "container", _container]
|
||||
],
|
||||
["server"]
|
||||
] call RangerMetrics_fnc_queue;
|
||||
] call RangerMetrics_fnc_send;
|
||||
|
||||
[_unit] call RangerMetrics_capture_fnc_unit_inventory;
|
||||
nil;
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
if (!isServer) exitWith {};
|
||||
|
||||
if (!RangerMetrics_cbaPresent) exitWith {
|
||||
[
|
||||
format["RangerMetrics: CBA not present, aborting class EHs."],
|
||||
"WARN"
|
||||
] call RangerMetrics_fnc_log;
|
||||
false;
|
||||
|
||||
// TODO: Add non-CBA compatibility for unit handler & id application
|
||||
// addMissionEventHandler ["EntityCreated", {
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
// Initialize all units
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
["Man", "InitPost", {
|
||||
params ["_unit"];
|
||||
[_unit] call RangerMetrics_cDefinitions_fnc_unit_handlers;
|
||||
|
||||
_unit setVariable [
|
||||
"RangerMetrics_id",
|
||||
RangerMetrics_nextID,
|
||||
true
|
||||
];
|
||||
|
||||
[_unit] call RangerMetrics_capture_fnc_unit_inventory;
|
||||
[_unit] call RangerMetrics_capture_fnc_unit_state;
|
||||
|
||||
if (RangerMetrics_debug) then {
|
||||
[
|
||||
format["ID %1, Object %2 (%3)", RangerMetrics_nextID, _unit, [configOf _unit] call BIS_fnc_displayName],
|
||||
"DEBUG"
|
||||
] call RangerMetrics_fnc_log;
|
||||
};
|
||||
RangerMetrics_nextID = RangerMetrics_nextID + 1;
|
||||
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
@@ -1,3 +1,5 @@
|
||||
if (!isServer) exitWith {};
|
||||
|
||||
params [["_text","Log text invalid"], ["_logType","DEBUG"]];
|
||||
|
||||
if (typeName _this != "ARRAY") exitWith {
|
||||
@@ -19,24 +21,8 @@ private _textFormatted = format [
|
||||
"[%1] %2: %3",
|
||||
RangerMetrics_logPrefix,
|
||||
_logType,
|
||||
_text];
|
||||
_text
|
||||
];
|
||||
|
||||
if(isServer) then {
|
||||
diag_log text _textFormatted;
|
||||
if(isMultiplayer) then {
|
||||
_playerIds = [];
|
||||
{
|
||||
_player = _x;
|
||||
_ownerId = owner _player;
|
||||
if(_ownerId > 0) then {
|
||||
if(getPlayerUID _player in ["76561198013533294"]) then {
|
||||
_playerIds pushBack _ownerId;
|
||||
};
|
||||
};
|
||||
} foreach allPlayers;
|
||||
|
||||
if(count _playerIds > 0) then {
|
||||
[_textFormatted] remoteExec ["diag_log", _playerIds];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
diag_log text _textFormatted;
|
||||
|
||||
@@ -3,24 +3,21 @@
|
||||
if (is3DEN || !isMultiplayer) exitWith {};
|
||||
if (!isServer && hasInterface) exitWith {};
|
||||
|
||||
|
||||
RangerMetrics = false call CBA_fnc_createNamespace;
|
||||
|
||||
RangerMetrics_cbaPresent = isClass(configFile >> "CfgPatches" >> "cba_main");
|
||||
RangerMetrics_aceMedicalPresent = isClass(configFile >> "CfgPatches" >> "ace_medical_status");
|
||||
RangerMetrics_logPrefix = "RangerMetrics";
|
||||
RangerMetrics_debug = false;
|
||||
RangerMetrics_initialized = false;
|
||||
RangerMetrics_run = true;
|
||||
RangerMetrics_nextID = 0;
|
||||
RangerMetrics_messageQueue = createHashMap;
|
||||
// for debug, view messages in queue
|
||||
// RangerMetrics_messageQueue apply {[_x, count _y]};
|
||||
RangerMetrics_sendBatchHandle = scriptNull;
|
||||
|
||||
RangerMetrics_settings = createHashMap;
|
||||
RangerMetrics_recordingSettings = createHashMap;
|
||||
|
||||
[format ["Instance name: %1", profileName]] call RangerMetrics_fnc_log;
|
||||
[format ["CBA detected: %1", RangerMetrics_cbaPresent]] call RangerMetrics_fnc_log;
|
||||
["Initializing v0.0.2"] call RangerMetrics_fnc_log;
|
||||
["Initializing v0.0.3"] call RangerMetrics_fnc_log;
|
||||
|
||||
// Create listener - extension calls are async, so we need to listen for the response
|
||||
addMissionEventHandler [
|
||||
@@ -29,24 +26,4 @@ addMissionEventHandler [
|
||||
];
|
||||
|
||||
// Deinit to start fresh. See callback handler for the remainder of async init code
|
||||
"RangerMetrics" callExtension "deinitExtension";
|
||||
|
||||
|
||||
|
||||
if (true) exitWith {};
|
||||
|
||||
|
||||
[] spawn {
|
||||
sleep 1;
|
||||
isNil {
|
||||
|
||||
|
||||
// set up CBA class inits if CBA loaded
|
||||
call RangerMetrics_fnc_classHandlers;
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
"RangerMetrics" callExtension "initExtension";
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
params [
|
||||
["_bucket", "default", [""]],
|
||||
"_measurement",
|
||||
["_tags", [], [[], nil]],
|
||||
["_fields", [], [[], nil]],
|
||||
["_tagContext", ["profile", "server"], [[]]]
|
||||
];
|
||||
|
||||
|
||||
// format[
|
||||
// "profile=%1,world=%2,%3",
|
||||
// profileName,
|
||||
// toLower worldName,
|
||||
// (_tags apply {format['%1=%2', _x#0, _x#1]}) joinString ","
|
||||
// ],
|
||||
|
||||
if (_tagContext find "profile" > -1) then {
|
||||
_tags pushBack ["string", "profileName", profileName];
|
||||
};
|
||||
if (_tagContext find "world" > -1) then {
|
||||
_tags pushBack ["string", "world", toLower worldName];
|
||||
};
|
||||
if (_tagContext find "server" > -1) then {
|
||||
private _serverProfile = missionNamespace getVariable [
|
||||
"RangerMetrics_serverProfileName",
|
||||
""
|
||||
];
|
||||
if (_serverProfile isNotEqualTo "") then {
|
||||
_tags pushBack [
|
||||
"string",
|
||||
"connectedServer",
|
||||
_serverProfile
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
private _outTags = _tags apply {
|
||||
[_x, "tag"] call RangerMetrics_fnc_toLineProtocol
|
||||
} select {!isNil "_x"};
|
||||
// having no tags is OK
|
||||
|
||||
_outTags = _outTags joinString ",";
|
||||
|
||||
|
||||
private _outFields = _fields apply {
|
||||
[_x, "field"] call RangerMetrics_fnc_toLineProtocol
|
||||
} select {!isNil "_x"};
|
||||
// having no fields will cause an error
|
||||
if (count _outFields isEqualTo 0) exitWith {};
|
||||
|
||||
_outFields = _outFields joinString ",";
|
||||
|
||||
|
||||
private _extSend = format [
|
||||
"%1,%2 %3 %4",
|
||||
_measurement, // metric name
|
||||
_outTags,
|
||||
_outFields,
|
||||
call RangerMetrics_fnc_unixTimestamp
|
||||
];
|
||||
|
||||
// add to queue
|
||||
(RangerMetrics_messageQueue getOrDefault [_bucket, [], true]) pushBack _extSend;
|
||||
|
||||
true
|
||||
@@ -1,66 +1,63 @@
|
||||
// send the data
|
||||
|
||||
// duplicate the message queue so we can clear it before sending the data
|
||||
private "_extSend";
|
||||
// isNil {
|
||||
// _extSend = + RangerMetrics_messageQueue;
|
||||
// RangerMetrics_messageQueue = createHashMap;
|
||||
// };
|
||||
params [
|
||||
["_bucket", "default", [""]],
|
||||
"_measurement",
|
||||
["_tags", [], [[], nil]],
|
||||
["_fields", [], [[], nil]],
|
||||
["_tagContext", ["profile", "server"], [[]]]
|
||||
];
|
||||
|
||||
|
||||
// debug
|
||||
if (
|
||||
missionNamespace getVariable ["RangerMetrics_debug",false]
|
||||
) then {
|
||||
["Sending a3influx data", "DEBUG"] call RangerMetrics_fnc_log;
|
||||
// format[
|
||||
// "profile=%1,world=%2,%3",
|
||||
// profileName,
|
||||
// toLower worldName,
|
||||
// (_tags apply {format['%1=%2', _x#0, _x#1]}) joinString ","
|
||||
// ],
|
||||
|
||||
if (_tagContext find "profile" > -1) then {
|
||||
_tags pushBack ["string", "profileName", profileName];
|
||||
};
|
||||
if (_tagContext find "world" > -1) then {
|
||||
_tags pushBack ["string", "world", toLower worldName];
|
||||
};
|
||||
if (_tagContext find "server" > -1) then {
|
||||
private _serverProfile = missionNamespace getVariable [
|
||||
"RangerMetrics_serverProfileName",
|
||||
""
|
||||
];
|
||||
if (_serverProfile isNotEqualTo "") then {
|
||||
_tags pushBack [
|
||||
"string",
|
||||
"connectedServer",
|
||||
_serverProfile
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
// run in direct unscheduled call
|
||||
// prevents race condition accessing hashmap
|
||||
isNil {
|
||||
private _bucket = _x;
|
||||
private _batchSize = 2000;
|
||||
private _outTags = _tags apply {
|
||||
[_x, "tag"] call RangerMetrics_fnc_toLineProtocol
|
||||
} select {!isNil "_x"};
|
||||
// having no tags is OK
|
||||
|
||||
// get the records for this bucket
|
||||
private "_records";
|
||||
private _records = RangerMetrics_messageQueue get _bucket;
|
||||
_outTags = _outTags joinString ",";
|
||||
|
||||
// send the data in chunks
|
||||
private _processing = _records select [0, (count _records -1) min _batchSize];
|
||||
|
||||
RangerMetrics_messageQueue set [
|
||||
_bucket,
|
||||
(RangerMetrics_messageQueue get _bucket) - _processing
|
||||
];
|
||||
private _outFields = _fields apply {
|
||||
[_x, "field"] call RangerMetrics_fnc_toLineProtocol
|
||||
} select {!isNil "_x"};
|
||||
// having no fields will cause an error
|
||||
if (count _outFields isEqualTo 0) exitWith {};
|
||||
|
||||
// send the data
|
||||
if (
|
||||
missionNamespace getVariable ["RangerMetrics_debug",false]
|
||||
) then {
|
||||
[format ["Bucket: %1, RecordsCount: %2", _bucket, count _processing], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
_outFields = _outFields joinString ",";
|
||||
|
||||
// get unique measurement IDs
|
||||
private _measurements = [];
|
||||
{
|
||||
_thisMeasurement = _x splitString "," select 0;
|
||||
_measurements pushBackUnique _thisMeasurement;
|
||||
} forEach _processing;
|
||||
private _extSend = format [
|
||||
"%1,%2 %3 %4",
|
||||
_measurement, // metric name
|
||||
_outTags,
|
||||
_outFields,
|
||||
call RangerMetrics_fnc_unixTimestamp
|
||||
];
|
||||
|
||||
// get counts of each measurement
|
||||
private _measurementCounts = [];
|
||||
{
|
||||
private _measurement = _x;
|
||||
_measurementCounts pushBack [
|
||||
_measurement,
|
||||
count (_measurements select {_x == _measurement})
|
||||
];
|
||||
} forEach _measurements;
|
||||
"RangerMetrics" callExtension ["sendToInflux", [_bucket, _extSend]];
|
||||
|
||||
[format ["Measurements: %1", _measurementCounts], "DEBUG"] call RangerMetrics_fnc_log;
|
||||
};
|
||||
|
||||
"RangerMetrics" callExtension ["sendToInflux", flatten [_bucket, _processing]];
|
||||
};
|
||||
|
||||
} forEach (keys RangerMetrics_messageQueue);
|
||||
true;
|
||||
@@ -13,40 +13,40 @@ if (_interval == 0) exitWith {
|
||||
};
|
||||
|
||||
// run a constant scheduled loop
|
||||
private _runnerVar = "RangerMetrics" + "_serverPollRunner_" + _refName;
|
||||
missionNamespace setVariable [_runnerVar, scriptNull];
|
||||
private _spawnParams = [_refName, _code, _interval, _runnerVar];
|
||||
private _handle = _spawnParams spawn {
|
||||
params ["_refName", "_code", "_interval", "_runnerVar"];
|
||||
while {true} do {
|
||||
if (scriptDone (
|
||||
missionNamespace getVariable _runnerVar
|
||||
)) then {
|
||||
private _handle = [] spawn _code;
|
||||
missionNamespace setVariable [
|
||||
_runnerVar,
|
||||
_handle
|
||||
];
|
||||
};
|
||||
// sleep _interval;
|
||||
sleep 2;
|
||||
};
|
||||
};
|
||||
missionNamespace setVariable [
|
||||
"RangerMetrics" + "_serverPoll_" + _refName,
|
||||
_handle
|
||||
];
|
||||
|
||||
// USE PFH
|
||||
// private _handle = [{
|
||||
// params ["_args", "_idPFH"];
|
||||
// _args params ["_refName", "_code"];
|
||||
|
||||
// [_code] call CBA_fnc_execNextFrame;
|
||||
|
||||
// }, _interval, _this] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
// private _runnerVar = "RangerMetrics" + "_serverPollRunner_" + _refName;
|
||||
// missionNamespace setVariable [_runnerVar, scriptNull];
|
||||
// private _spawnParams = [_refName, _code, _interval, _runnerVar];
|
||||
// private _handle = _spawnParams spawn {
|
||||
// params ["_refName", "_code", "_interval", "_runnerVar"];
|
||||
// while {true} do {
|
||||
// if (scriptDone (
|
||||
// missionNamespace getVariable _runnerVar
|
||||
// )) then {
|
||||
// private _handle = [] spawn _code;
|
||||
// missionNamespace setVariable [
|
||||
// _runnerVar,
|
||||
// _handle
|
||||
// ];
|
||||
// };
|
||||
// // sleep _interval;
|
||||
// sleep 2;
|
||||
// };
|
||||
// };
|
||||
// missionNamespace setVariable [
|
||||
// "RangerMetrics" + "_serverPoll_" + _refName,
|
||||
// _handle
|
||||
// ];
|
||||
// ];
|
||||
|
||||
// USE PFH
|
||||
private _handle = [{
|
||||
params ["_args", "_idPFH"];
|
||||
_args params ["_refName", "_code"];
|
||||
|
||||
[_code] call CBA_fnc_execNextFrame;
|
||||
|
||||
}, _interval, _this] call CBA_fnc_addPerFrameHandler;
|
||||
|
||||
missionNamespace setVariable [
|
||||
"RangerMetrics" + "_serverPoll_" + _refName,
|
||||
_handle
|
||||
];
|
||||
Reference in New Issue
Block a user