<?xml version="1.0" encoding="UTF-8" ?>
<!-- created at 2025-12-15 15:25:10 -->
<UANodeSet xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd">
	<Extensions>
		<atvise Version="3.13"/>
	</Extensions>
	<NamespaceUris>
		<Uri>http://www.atvise.com/atServer/UA/</Uri>
	</NamespaceUris>
	<Aliases>
		<!-- data types -->
		<Alias Alias="Boolean">i=1</Alias>
		<Alias Alias="SByte">i=2</Alias>
		<Alias Alias="Byte">i=3</Alias>
		<Alias Alias="Int16">i=4</Alias>
		<Alias Alias="UInt16">i=5</Alias>
		<Alias Alias="Int32">i=6</Alias>
		<Alias Alias="UInt32">i=7</Alias>
		<Alias Alias="Int64">i=8</Alias>
		<Alias Alias="UInt64">i=9</Alias>
		<Alias Alias="Float">i=10</Alias>
		<Alias Alias="Double">i=11</Alias>
		<Alias Alias="String">i=12</Alias>
		<Alias Alias="DateTime">i=13</Alias>
		<Alias Alias="ByteString">i=15</Alias>
		<Alias Alias="XmlElement">i=16</Alias>
		<Alias Alias="NodeId">i=17</Alias>
		<Alias Alias="LocalizedText">i=21</Alias>
		<!-- references -->
		<Alias Alias="Organizes">i=35</Alias>
		<Alias Alias="HasEventSource">i=36</Alias>
		<Alias Alias="HasModellingRule">i=37</Alias>
		<Alias Alias="HasTypeDefinition">i=40</Alias>
		<Alias Alias="HasSubtype">i=45</Alias>
		<Alias Alias="HasProperty">i=46</Alias>
		<Alias Alias="HasComponent">i=47</Alias>
		<Alias Alias="HasNotifier">i=48</Alias>
		<Alias Alias="HasCondition">i=9006</Alias>
		<Alias Alias="HasHistoricalConfiguration">i=56</Alias>
		<!-- types -->
		<Alias Alias="BaseDataType">i=24</Alias>
		<Alias Alias="BaseObjectType">i=58</Alias>
		<Alias Alias="FolderType">i=61</Alias>
		<Alias Alias="BaseVariableType">i=62</Alias>
		<Alias Alias="BaseDataVariableType">i=63</Alias>
		<Alias Alias="PropertyType">i=68</Alias>
		<Alias Alias="AlarmConditionStateType">ns=1;i=1001</Alias>
		<!-- modelling rules -->
		<Alias Alias="New">i=78</Alias>
		<Alias Alias="Shared">i=79</Alias>
		<Alias Alias="SharedExclusive">i=336</Alias>
		<!-- other -->
		<Alias Alias="Server">i=2253</Alias>
		<Alias Alias="Objects">i=85</Alias>
	</Aliases>
	<UAObject NodeId="ns=1;s=AGENT" BrowseName="1:AGENT">
		<DisplayName Locale="en">AGENT</DisplayName>
		<Description Locale="en">AGENT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=ObjectTypes.ATVISE.Server.Local</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=AGENT.OBJECTS.getSessionsUsers" ExportedBrowseName="1:getSessionsUsers" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=AGENT.OBJECTS" BrowseName="1:OBJECTS">
		<DisplayName Locale="en">OBJECTS</DisplayName>
		<Description Locale="en">OBJECTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=AGENT.OBJECTS.getSessionsUsers" BrowseName="1:getSessionsUsers" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">getSessionsUsers</DisplayName>
		<Description Locale="en">getSessionsUsers</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT.OBJECTS</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.ScriptCode</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<script>
  <parameter name="t" type="timer" trigger="true" relative="false" value="" starttime="00:00:00" repeat="00:00:10"/>
  <code><![CDATA[var session_user_string = "";
var webaccess = Ua.findNode("ModuleStatistics.WEBACCESS");

var sessions = webaccess.result.browse({
          direction: Ua.Node.BROWSEDIRECTION_FORWARD,
          reference: Ua.Reference.HIERARCHICALREFERENCES,
          subType: true,
          nodeClass: Ua.NodeClass.UNSPECIFIED,
		  typeDefinition: Ua.ObjectType.FOLDERTYPE,
          maxResult:0
});

for ( var i = 0; i< sessions.result.length; ++i){
	var session = sessions.result[i]["node"]["nodeId"]["xml"];	
	var ip = Ua.findNode(session + ".ClientIP").result.value.split(":")[0];
	var user = Ua.findNode(session + ".UserId").result.value;
	session_user_string += ip + "|" + user + ",";
}

var node = Ua.findNode("AGENT.OBJECTS.session_user_string");

if(node.result.value != session_user_string){
	node.result.value = session_user_string;
}]]]]><![CDATA[></code>
</script>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=AGENT" BrowseName="1:AGENT">
		<DisplayName Locale="en">AGENT</DisplayName>
		<Description Locale="en">AGENT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=ObjectTypes.ATVISE.Server.Local</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=AGENT.OBJECTS.session_user_string" ExportedBrowseName="1:session_user_string" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=AGENT.OBJECTS" BrowseName="1:OBJECTS">
		<DisplayName Locale="en">OBJECTS</DisplayName>
		<Description Locale="en">OBJECTS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=AGENT.OBJECTS.session_user_string" BrowseName="1:session_user_string" DataType="String" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">session_user_string</DisplayName>
		<Description Locale="en">session_user_string</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=AGENT.OBJECTS</Reference>
			<Reference ReferenceType="HasTypeDefinition">BaseVariableType</Reference>
		</References>
		<Value>
			<uax:String></uax:String>
		</Value>
	</UAVariable>
	<UAObject NodeId="ns=1;s=SYSTEM" BrowseName="1:SYSTEM">
		<DisplayName Locale="en">SYSTEM</DisplayName>
		<Description Locale="en">SYSTEM</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">Objects</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise ExportedNodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.SessionTable" ExportedBrowseName="1:SessionTable" Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY" BrowseName="1:LIBRARY">
		<DisplayName Locale="en">LIBRARY</DisplayName>
		<Description Locale="en">LIBRARY</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT" BrowseName="1:PROJECT">
		<DisplayName Locale="en">PROJECT</DisplayName>
		<Description Locale="en">PROJECT</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAObject NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS" BrowseName="1:OBJECTDISPLAYS">
		<DisplayName Locale="en">OBJECTDISPLAYS</DisplayName>
		<Description Locale="en">OBJECTDISPLAYS</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT</Reference>
			<Reference ReferenceType="HasTypeDefinition">FolderType</Reference>
		</References>
		<Extensions>
			<atvise Upstream="true"/>
		</Extensions>
	</UAObject>
	<UAVariable NodeId="ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS.SessionTable" BrowseName="1:SessionTable" DataType="XmlElement" AccessLevel="103" UserAccessLevel="103" Historizing="true">
		<DisplayName Locale="en">SessionTable</DisplayName>
		<Description Locale="en">SessionTable</Description>
		<References>
			<Reference ReferenceType="HasComponent" IsForward="false">ns=1;s=SYSTEM.LIBRARY.PROJECT.OBJECTDISPLAYS</Reference>
			<Reference ReferenceType="HasTypeDefinition">ns=1;s=VariableTypes.ATVISE.Display</Reference>
		</References>
		<Value>
			<uax:XmlElement><![CDATA[<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="410" version="1.2" width="454.08" xmlns="http://www.w3.org/2000/svg" xmlns:atv="http://webmi.atvise.com/2007/svgext" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs/>
 <metadata>
  <atv:gridconfig enabled="false" gridstyle="lines" height="20" width="20"/>
  <atv:snapconfig enabled="false" height="10" width="10"/>
 </metadata>
 <svg atv:refpx="227.023" atv:refpy="227.129" height="640" id="id_0" transform="matrix(0.7095,0,0,0.566,0,0)" width="640" x="0" xlink:href="SYSTEM.LIBRARY.ATVISE.OBJECTDISPLAYS.Advanced.slickgrid.table" y="81.265">
  <atv:argument name="tableID" value="myTableName"/>
 </svg>
 <script atv:desc="" atv:name="" type="text/ecmascript"><![CDATA[webMI.table.loadResources(function() {

var config = [];
// *** BEGIN CONFIGURATION SECTION ***

function valueColFormater(row, cell, value, columnDef, dataContext) {

	var color = "";
	var cssClass = "";
	
	return "<div class='" + cssClass + "' style='margin:-5px; padding: 5px; background-color: " + color + "; width: 100%'>" + value + "</div>";
}

config["columns"] = [
	{id: "IP", name: "T{ip}", field: "ip", sortable: true, filter: true, visible: true, width:300, sortByDefault: true, sortByDefaultAsc: true},
	{id: "User", name: "T{user}", field: "user", formatter: valueColFormater, sortable: true, filter: true, visible: true, width:300, sortByDefault: true, sortByDefaultAsc: true},
];

 
config["mode"] = "once";
 
config["dataRequestFunction"] = function myRequest() {
	var that = this;	
	var data = [];
	webMI.data.subscribe("AGENT.OBJECTS.session_user_string", function(e){
		var sessions = e.value.split(",");
		data.result = [];
		for(session in sessions) {
			if(sessions[session] != ""){
				data.result.push({ ip: sessions[session].split("|")[0] , user: sessions[session].split("|")[1], atvise_marker: false, atvise_expand: false});
			};			
		}
		that.clearData();
		that.addData(data);
	});
};


// *** END CONFIGURATION SECTION ***

webMI.table.register("myTableName", "config", config);
webMI.table.setReady("myTableName", "config");

});


]]]]><![CDATA[></script>
 <rect atv:refpx="226.641" atv:refpy="23.768" fill="#e5e5e5" height="45.837" id="id_1" stroke="#d3d3d3" stroke-width="1" width="451.583" x="0.849" y="0.849"/>
 <text atv:refpx="227.141" atv:refpy="29.302" fill="#575757" font-family="Arial" font-size="28" font-weight="bold" id="id_2" text-anchor="middle" x="226.641" y="33.802">Session Table</text>
</svg>
]]></uax:XmlElement>
		</Value>
	</UAVariable>
</UANodeSet>
