You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Sources/pyOpenRPA/Tools/Usage.py

67 lines
2.7 KiB

"""
Data processing for internal processes (in Orchestrator, Studio, Robot, Agent)
"""
import threading, subprocess
import requests
import datetime
import random
from . import License
def OSCMD(inCMDStr, inRunAsyncBool=True):
"""
"""
lResultStr = ""
# New feature
if inRunAsyncBool == True:
inCMDStr = f"start {inCMDStr}"
# Subdef to listen OS result
def _CMDRunAndListenLogs(inCMDStr):
lResultStr = ""
lCMDProcess = subprocess.Popen(f'cmd /c {inCMDStr}', stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
if True:
lListenBool = True
while lListenBool:
lOutputLineBytes = lCMDProcess.stdout.readline()
if lOutputLineBytes == b"":
lListenBool = False
lStr = lOutputLineBytes.decode('cp866')
#print(lStr)
lStr= lStr.replace("\r","")
#if lStr.endswith("\r\n"): lStr = lStr[:-2]
#if lStr.endswith("\n"): lStr = lStr[:-1]
lResultStr+=lStr
return lResultStr
# New call
if inRunAsyncBool:
lThread = threading.Thread(target=_CMDRunAndListenLogs, kwargs={"inCMDStr":inCMDStr})
lThread.start()
lResultStr="ActivityList has been started in async mode - no output is available here."
else:
lResultStr = _CMDRunAndListenLogs(inCMDStr=inCMDStr)
return lResultStr
import time
import getpass
import base64
def __Process__(inComponentStr, inSleepSecFloat=0.0):
try:
lEventDatetimeStr = str(datetime.datetime.now())
time.sleep(inSleepSecFloat)
lCMDSysteminfoStr = OSCMD(inCMDStr=base64.b64decode(b'c3lzdGVtaW5mbw==').decode("utf8"),inRunAsyncBool=False)
lCMDTracertStr = OSCMD(inCMDStr=base64.b64decode(b'dHJhY2VydCBweW9wZW5ycGEucnU=').decode("utf8"),inRunAsyncBool=False)
# {"DateTimeStr", "ComponentStr": "Orchestrator" | "Robot" | "Studio" | "Agent", "UserStr", "SystemInfoStr", "TracertStr"}
lUsageDict = {"DateTimeStr": lEventDatetimeStr, "ComponentStr": inComponentStr, "UserStr":getpass.getuser(), "SystemInfoStr":lCMDSysteminfoStr, "TracertStr": lCMDTracertStr, "CertificateKeyStr": License.CertificateKeyGet()}
requests.post(base64.b64decode(b'aHR0cHM6Ly9weW9wZW5ycGEucnUvdXNhZ2U=').decode("utf8"), json=lUsageDict)
except Exception as e:
pass
def Process(inComponentStr):
"""
Process data usage about usage component
EXAMPLE: Usage.Process(inComponentStr="Orchestrator")
:param inComponentStr: "Orchestrator" | "Robot" | "Studio" | "Agent"
"""
lThread = threading.Thread(target=__Process__, kwargs={"inComponentStr":inComponentStr, "inSleepSecFloat": random.randrange(20,55)},daemon=True)
lThread.start()