MetaFusion/Reference/MSLiveLink/Megascans/Analytics.py

95 lines
3.4 KiB
Python
Raw Normal View History

2025-02-03 22:58:41 +08:00
import sys, json
sys.path.append("..") # Adds higher directory to python modules path.
import socket
import maya.cmds as cmds
import maya.mel as melc
# For Importing Requests package
import os
parent_dir = os.path.abspath(os.path.dirname(__file__))
package = os.path.join(parent_dir, 'RequestLibrary')
sys.path.append(package)
# For Handling all kinds of Logging
class Analytics:
def __init__(self,id, guid, export_type):
self.id = id
self.guid = guid
self.export_type = export_type
self.sendBridgeLog()
self.sendMetabase()
# Open Local Connection to get Port from Bridge
def GetActivePort(self):
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 28852 # Port to listen on (non-privileged ports are > 1023)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST, PORT))
activeport = sock.recv(32)
sock.close()
return activeport.decode("utf-8")
# Set the data which will be sent to metabase
def GetData(self):
# from Megascans.ImporterSetup import importerSetup
# instance = importerSetup.getInstance()
from LiveLink import MAYA_PLUGIN_VERSION
self.maya_version = cmds.about(version=True)
self.renderer = melc.eval("getAttr defaultRenderGlobals.currentRenderer;")
self.render_version = self.rendererVersion()
data = {
'event': "MAYA_ASSET_IMPORT",
'data':{
'guid': self.guid,
'plugin_version':MAYA_PLUGIN_VERSION,
'app_version': self.maya_version,
'renderer': self.renderer,
'renderer_version': self.render_version,
'asset_ID': self.id,
'export_type': self.export_type
}
}
return json.dumps(data)
# Gets the current active render engine and its version
def rendererVersion(self):
if(self.renderer == 'arnold'):
return cmds.pluginInfo('mtoa', query=True, version=True)
elif(self.renderer == 'redshift'):
return cmds.pluginInfo('redshift4maya', query=True, version=True)
elif(self.renderer == 'vray'):
return cmds.pluginInfo('vrayformaya', query=True, version=True)
elif(self.renderer == 'mayaSoftware'):
return '1.0'
elif(self.renderer == 'mayaHardware2'):
return '2.0'
elif(self.renderer == 'mayaVector'):
return '1.0'
else:
return "-"
# For Sending the data to Bridge Log File
def sendBridgeLog(self):
try:
from Megascans.RequestLibrary import requests
port = self.GetActivePort()
url = "http://localhost:" + port + "/log/"
response = requests.post(url, json=self.GetData())
#print("Logging Response : ", response)
except Exception as e:
print("Bridge Logging Exception", e)
# # For Sending the data to Metabase
def sendMetabase(self):
try:
from Megascans.RequestLibrary import requests
port = self.GetActivePort()
url = "http://localhost:" + port + "/analytics/"
response = requests.post(url, data=self.GetData())
#print("Metabase finished: ", response)
except Exception as e:
print("Metabase Exception : ", e)