Jump to content
fred41

Arma Server Monitor (very small, but useful)

Recommended Posts

Am I correct in my assumption that what the serverside does is just give out the 400 bytes of information stored in ram? The data looks exactly the same.

Are these assumptions correct?

- DWORD = 4 bytes

- CHAR = 32 bytes total (for profile / mission).

How hard would it be for it to "just" be handing this out via XML-RPC or a similar interface? Its really hard to query this via TCP being a custom socket. The same being accessing the parts via ram. This way you may modify it in the future, change and the calcs etc, without having to worry about breaking anything reliant on the hardcoded structure it is today. The amount of data in this regard, having a custom socket doesn't really speed it "down" if it can handle XML-RPC or a more standardized interface than the custom it is today. A few peers I asked to assist on fetching data via the TCP socket said they'd at least expect a \r\n at the end to signify its now recieved.

I've made a C# app that uses the shared memory mapped file, its "close" but no cigar, I dont know how you calculate the FPS or if its expected to always be X digits, place the "dot" here. The memory is ok, easy enough to guess.

Also in ASM, the process id is in HEX, not in Decimals ;-)

Share this post


Link to post
Share on other sites

... exactly, 400 Bytes currently, (9*4 + 2*32)*4 ...

This fits in only one packet and there is no standard, what to send/receive via a socket.

If you code in C#, you will find a lot helpful examples, for using sockets.

If connected, just send a zero (4 bytes) and receive the well structured data, could it be simpler?

FPS and CPS [0..50000] have to be divided be 1000 to get a float value [0..50.0].

Hexadecimal is only one of many possible notations for a number ;-)

Share this post


Link to post
Share on other sites
... exactly, 400 Bytes currently, (9*4 + 2*32)*4 ...

This fits in only one packet and there is no standard, what to send/receive via a socket.

If you code in C#, you will find a lot helpful examples, for using sockets.

If connected, just send a zero (4 bytes) and receive the well structured data, could it be simpler?

FPS and CPS [0..50000] have to be divided be 1000 to get a float value [0..50.0].

Hexadecimal is only one of many possible notations for a number ;-)

Hi there,

Can I just inquire as to why you're outputting some random binary struct instead of a standardized data exchange format such as XML or JSON? In this case, for web use, and for reporting, both of those methods would be preferable.

Is there any chance you can wrap this in one of the above?

Cheers,

Phil

Edited by modul8

Share this post


Link to post
Share on other sites

... yes, the current implementation is the simplest possible solution to transfer a few bytes from ASM-server to ASM-client.

ASM is WIP and if i add a new value for monitoring, i just have to change two struct defines (one in ASMdll.dll and one in ASM) and i am ready.

There is no processing requiered at all, ASM-server just puts internal data in a TCP packet an transfer it. The receiving ASM-client can use it without processing too.

But i think i understand the advantage of common protocols like JSON or XML-RPC, especially if independent third party tools are trying to fetch and process this data.

I support this idea generally, so there is a chance that i will implement a standard protocol as additional option.

So lets first discuss, which of the common protocols is most convenient, to fetch a few integer values and strings.

I think it should be:

  • platform independent
  • compact (bandwith)
  • easy to encode (performance)

did i forget something?

modul8 & TheFlyingCorpse, if you are familiar with some of this protocols, what do you think, is the best for our special application?

Hi there,

Can I just inquire as to why you're outputting some random binary struct instead of a standardized data exchange format such as XML or JSON? In this case, for web use, and for reporting, both of those methods would be preferable.

Is there any chance you can wrap this in one of the above?

Cheers,

Phil

Share this post


Link to post
Share on other sites

I think in terms of time, wrapping this in XML would be the best, also, it means it is easy to parse with most languages. JSON may be more difficult from your side to implement :)

Share this post


Link to post
Share on other sites

minor update:

all UI settings are now saved/restored to/from registry at session end/start

Share this post


Link to post
Share on other sites

I tried to download the ArmaServerMonitor.exe but was stopped by my antivirus. Can you check it and correct the exe file if it's a false positive ?

Thx.

Share this post


Link to post
Share on other sites

... checked with windows defender, negative ...

You can download the whole archive from github by clicking the right button "Download ZIP" and then rescan locally with your prefered virus scanner.

Greets,

Fred41

Share this post


Link to post
Share on other sites

Dunno if I'm missing something, but I see no .exe in the .zip file...

Edit: NM me being noob. individual download doesn't work, but getting it out of the ASM-master.zip does.

Share this post


Link to post
Share on other sites
Dunno if I'm missing something, but I see no .exe in the .zip file...

Edit: NM me being noob. individual download doesn't work, but getting it out of the ASM-master.zip does.

... individual download is just a bit tricky on github: select the file via click, then click RAW and you can save the single file :)

Share this post


Link to post
Share on other sites

Hi Fred,

I've lost touch with what your tool is currently capable of.

Can it, or can you edit it so that it has an option to log data to a txt file.

I think we will need such a log so B.I can diagnose the issue we are having, stated in the following thread.

http://forums.bistudio.com/showthread.php?168337-Multiplayer-not-in-playable-state

Share this post


Link to post
Share on other sites
... your params looks correct.

Try the following:

Start the first ASM instance without params (defaults to: -server -n1 -h127.0.0.1 -p24000) local on server device.

Start the second ASM instance local on your server device too, with: -client -h127.0.0.1 -p24000.

If this connection works (Request/Update in title line of ASM), then you know the problem is still in your firewall(s) configuration.

Let me know,

Fred41

Aha! Now it works. I've been struggling with the client setup. I was getting the 10060 connection error too and have faithfully followed everything here. Running an ASM instance on the server first, then on the remote client now means the client does connect and show data.

I've fiddled with the firewall endlessly on the server box to no avail. Is there any problems with leaving ASM running on the server so that I can be assured the client will connect?

---------- Post added at 14:09 ---------- Previous post was at 13:46 ----------

Ugh. I clicked on transparency on my server version, and it went all transparent - perhaps not unsurprisingly :), but now I can't set it back to non-transparent. Right clicking on it appears to right click what ever is below the window. I'm stuck with it transparent now. :(

Share this post


Link to post
Share on other sites

@Terox, hi and thanks for the link, lets hope this issue is fixable.

ASM in his current state, is able to record up to 2+ hours.

You just have to change the sampling interval (RMB on values or bars) to 10 seconds and your history will record data/graphs for the last 8000 seconds.

If your record is ready, you just have to make a screenshot.

If 2+ hours is not long enough to show this issue, just let me know and we will find a solution soon.

@Tankbuster, glad to hear it works now :)

ASM is build to run for days without problems. So just let it run and connect/disconnect with ASM client if you like.

The transparency option is meant as a cosmetic feature with fun effect.

The funny part is, that you have to hit exactly the non transparent pixels to switch transparency off again :)

Greets,

Fred41

Share this post


Link to post
Share on other sites
The transparency option is meant as a cosmetic feature with fun effect.

The funny part is, that you have to hit exactly the non transparent pixels to switch transparency off again :)

Seen and fixed.

It's a workaround running the serverside monitor to allow my client to connect, that's not a problem, but a second client still can't connect. He's trying to connect from a different IP and he gets the same 10060 error.

Share this post


Link to post
Share on other sites
Seen and fixed.

It's a workaround running the serverside monitor to allow my client to connect, that's not a problem, but a second client still can't connect. He's trying to connect from a different IP and he gets the same 10060 error.

... ah, i think i missunderstood your early question ...

Running a serverside ASM is not a workaround, it is basically necessary to:

connect an additional (optional) remote ASM instance in client-mode (allowing admins to watch ASM output without access to servers desktop).

If you need to connect more then one ASM client to the same ASM-server, you have to configure ASM-server with -nX param, where X is the number of max allowed clients.

Edited by Fred41

Share this post


Link to post
Share on other sites
... ah, i think i missunderstood your early question ...

If you need to connect more then one ASM client to the same ASM-server, you have to configure ASM-server with -nX param, where X is the number of max allowed clients.

Yeah, I'm doing that. -n2. Just to confirm, these parameters we're giving to the server instance - it's done via the target line of a shortcut that points to the exe?

Share this post


Link to post
Share on other sites
Yeah, I'm doing that. -n2. Just to confirm, these parameters we're giving to the server instance - it's done via the target line of a shortcut that points to the exe?

... yes, exactly, and it still does'nt work for more then one client?

... just post your whole ASM server start command line please, just to check for typo ...

Edited by Fred41

Share this post


Link to post
Share on other sites

minor update, please notice the following changes:

1. The history graphs for FPS, CPS and FPSmin values are changed from logarithmic scale to linear scale. This should simplify the back reading from screenshots.

2. The bar for MEM value is now scaled to 4GB.

ASM is currently using the following ranges:

  • simulation cycles per second average (FPS): [0.0..50.0]
  • simulation cycles per second minimal (FPSmin): [0.0..50.0]
  • condition evaluations per second (CPS): [0.0..50.0]
  • number of alive players (PL#): [0..100]
  • number of alive server local AI units (AIL): [0..800]
  • number of alive server remote AI units (AIR): [0..800]
  • amount of allocated physical memory (MEM) [0..4096]

Share this post


Link to post
Share on other sites
... yes, exactly, and it still does'nt work for more then one client?

... just post your whole ASM server start command line please, just to check for typo ...

"F:\SteamLibrary\SteamApps\common\Arma 3\ArmaServerMonitor.exe" -server -n2 -h127.0.0.1 -p24000

Share this post


Link to post
Share on other sites

... hmmm, with exactly this line, i can connect up to 2 clients, the 3. client is rejected as expected ...

But i can only test it locally here (always same IP), so maybe there is a generally problem. I will check this as soon as posssible, with different IP's too.

Greets,

Fred41

Share this post


Link to post
Share on other sites
... hmmm, with exactly this line, i can connect up to 2 clients, the 3. client is rejected as expected ...

But i can only test it locally here (always same IP), so maybe there is a generally problem. I will check this as soon as posssible, with different IP's too.

Greets,

Fred41

yes, the other client is on different ip.

Share this post


Link to post
Share on other sites
... but a second client still can't connect. He's trying to connect from a different IP and he gets the same 10060 error.

+1 I got the same problem, can't connect 2 clients, the second one get "connexion closed" message. Clients are on two different IP's. Start line contains -n2.

Share this post


Link to post
Share on other sites

[*]condition evaluations per second (CPS)

Fred, what does evaluations / second tell us? I ask because since the last 2 players left my server, the CPS has been going down. It was at 50 CPS while players were there, since they left it's been falling. It's now at 3.3 CPS. FPS is a steady 45.

Share this post


Link to post
Share on other sites

... i uploaded a fixed version to github. It shows the active and the max allowed connections in title bar of server window [act/max].

This should help to isolate the problem if it still exists. Please try again with the fixed version and let me know your results.

Fred, what does evaluations / second tell us? I ask because since the last 2 players left my server, the CPS has been going down. It was at 50 CPS while players were there, since they left it's been falling. It's now at 3.3 CPS. FPS is a steady 45.

The CPS value primarily tells you, how many times per second a reference FSM condition is evaluated. Therefore CPS is a good indicator for AI response time and additional for the load of your VM (virtual machine) too.

A low CPS value (especially if much lower than FPS) is mostly caused by to many simultaneous running scripts in the VM.

If your CPS value is falling that much without players, it is possible that your servers power managment is the reason (CPU is clocked down without load)? Just set your power plan to high performance to evaluate that.

Edited by Fred41

Share this post


Link to post
Share on other sites
... i uploaded a fixed version to github. It shows the active and the max allowed connections in title bar of server window [act/max].

This should help to isolate the problem if it still exists. Please try again with the fixed version and let me know your results.

The CPS value primarily tells you, how many times per second a reference condition in FSMs is evaluated. Therefore CPS is a good indicator for AI response time and additional for the load of you VM (virtual machine) too.

A low CPS value (especially if much lower than FPS) is mostly caused by to many simultaneous running scripts in the VM.

If your CPS value is falling that much without players, it is possible that your servers power managment is the reason (CPU is clocked down without load)? Just set your power plan to high performance to evaluate that.

Didn't check the power management, but the moment I joined the server, the CPS popped straight back up to 50. :)

I'll check the new version right now and report back.

---------- Post added at 23:58 ---------- Previous post was at 22:48 ----------

Ugh. Virus checkers all going mad on the new exe. Panda, Avast, AVG... they all kill it with fire.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×