-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCognitiveSystem.py
65 lines (52 loc) · 2.63 KB
/
CognitiveSystem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from DynamicSystem import DynamicSystem
from collections import deque
from Logger import globalLogger, LogLevel
import traceback
class CognitiveSystem(DynamicSystem):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
commonProcesses = list(filter(lambda proc: proc.common, self.processes.values()))
self.commonProcesses = list(map(lambda proc: proc.Name, commonProcesses))
self.stack = deque()
self.params = {}
self.lastExecutedProcess = None
def RunProcess(self, proxy, procName):
if(procName in self.processes):
oldFrequency = proc.frequency
proc.frequency = 0
proc = self.processes[procName]
proc.frequency = oldFrequency
return proc.Run(proxy)
def RunProcesses(self, proxy, context):
try:
globalLogger.log(logLevel=LogLevel.cognitiveLog, message=f"Running processes in context {context}")
processes = self.processes.values()
processes = list(filter(lambda proc: (context in proc.contexts), processes))
processes = list(filter(lambda proc: ((proc.Name in proxy.cognitiveProcs) or (proc.Name in self.commonProcesses)), processes))
if(proxy.collective != None):
processes = list(filter(lambda proc: ((proc.Name not in proxy.collective.cognitiveProcs) and
(proc.Name not in self.commonProcesses)), processes))
if processes:
for process in processes:
localContext = proxy.context.GetUncommitedMessages(processName = process.Name, frequency = process.frequency)
if(len(localContext)>0):
process.localContext = localContext
else:
process.localContext = None
processes = list(filter(lambda proc: proc.localContext is not None, processes))
if(len(processes) > 0):
processes.sort(key=lambda proc: proc.priority)
try:
processToRun = processes[0]
processToRun.frequency+= 100
processToRun.Run(proxy)
self.lastExecutedProcess = processToRun
except Exception as e:
globalLogger.log(message = f"Error running process {process.Name} in context {context} for proxy {proxy}: {e}", logLevel=LogLevel.errorLog)
globalLogger.log(message = traceback.format_exc(), logLevel=LogLevel.errorLog)
except Exception as e:
globalLogger.log(message = f"Error running processes in context {context}: {e}", logLevel = LogLevel.errorLog)
globalLogger.log(message = traceback.format_exc(), logLevel = LogLevel.errorLog)
def getProcessPath(self):
return "CognitiveProcesses"
cognitiveSystem = CognitiveSystem()