Data Capture in Hifi


#1

Can anybody provide me some insight into what kind of information is stored in a log file when a server is running?

I am wanting to collect a massive amount of user data when people are interacting in my world.

For instance, every time somebody jumps is it stored some how? If they talk to somebody? If they collide with a model?

What information is logged and is there any way to extract that info?


#2

If you’re running server on windows - tray icon for sandbox then view logs will show you what can be seen.

If running on Linux then it depends on how AC/DS is being ran as to where, if anywhere, logs are written.

You’ll see all the connects/disconnects via AC/DS logs. As to model collisions… if it’s scripted then, sure, do a print statement in its collision detector and that’ll write it to log.

There’s a mountain of data in sandbox logs. Specifically how to extract should be obvious by looking at them as you connect/disconnect a client from domain.


#3

Could you explain more about scripting for logging events. How would one do a print statement in collision detector?


#4

No idea other than it, supposedly, can be done. Hopefully one of others who have more experience with such things will chime in or, worst case, you can try scraping what you need from;

https://docs.highfidelity.com/api-reference

And, possibly, other sources there.


#5

Most data that you will gain from just server logs by default is just regarding connectivity,

But most of the stuff you want to do require a bit of scripting and do not come as ready packages:

If you want to do data analytics, you need to create a new assignment client and monitor the entity tree for example to gather information on when an entity is created and what session ID created that entity (which you can connect to the machine finger print)…

You can also use the assignment client to monitor individual avatars , The basis relies on using

AvatarList.getAvatarIdentifiers() to get all avatars in the domain currently, then going through them via
AvatarList.getAvatar(id); to get an Avatar Object and all the properties associated with it, but none of the methods. You could then forexample check if the avatar is above an object by X amount to see if they are jumping or flying or if they are currently talking to microphone (via audioLoudness). Basically any information available on the Object is information you can log at will, but you will have to have a script that does the logging and a place where it will put the logging in. This also includes current skeleton data, which can get quite large, just to note.

You can test this without even running a domain, on any other domain locally! You can refer to my Avatar Follower UI, that allows you to locate invisible or tiny avatars or even refer to high fidelity’s own PAL script.

Collision states however require the client to say that a collision has occurred (because collision is client side). This could be achieved by adding a script to a client when they connect to your domain which then sends a Message on a channel, which an Assignment client is listening.

However you could check if someone is inside a zone, or an area without doing so.