Refined dispatcher and threading. Added lifecycle registry

This commit is contained in:
Lyncoln
2026-10-09 16:40:48 -04:00
parent e6b2722708
commit 8d91b8d716
42 changed files with 294 additions and 76 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+5
View File
@@ -1,3 +1,4 @@
from .server import server
from .apirequest import executeRequest
from .runtime import buildSave, loadSave, buildLog, manageFailure, buildOutput
#from .execution import buildOperation, buildAction
@@ -5,3 +6,7 @@ from .execution.action import buildAction
from .execution.operation import buildOperation
from .execution.executioncontract import executeContract
#from executioncontract import executionContract
from .execution.lifecyclemanager import manageLifecycle
from .execution.lifecyclemanager import registerLifecycle
from .execution.createthread import buildThread
from .server.dispatcher import dispatchRequest
Binary file not shown.
@@ -2,11 +2,10 @@ import threading
from lifecycleregistry import registerLifecycle
from lifecyclemanager import manageLifecycle
activethreads = []
threadlist = []
threadnum = 0
def buildThread(module, state, lifecycles):
#for mode in ("continuous", "oneshot")
def buildThread(module, lifecycles):
global threadnum
threadnum += 1
@@ -14,7 +13,7 @@ def buildThread(module, state, lifecycles):
thread = threading.Thread(
target=manageLifecycle,
args=(module, state)
args=(module, lifecycles)
)
thread.start()
@@ -23,9 +22,9 @@ def buildThread(module, state, lifecycles):
lifecycles = registerLifecycle (module, lifecycles, registryname, registryvalue)
activethreads.append(threadname)
threadlist.append(thread)
print(activethreads)
print(threadlist)
print(lifecycles)
return threadnum, threadname, lifecycles, activethreads
return threadnum, threadname, lifecycles, threadlist
@@ -0,0 +1,2 @@
from .lifecyclemanager import manageLifecycle
from .lifecycleregistry import registerLifecycle
@@ -0,0 +1,25 @@
import time
from core.execution.operation import buildOperation
from core.execution.action import buildAction
from core import executeContract
def manageLifecycle(module, lifecycles): #lifecycles, state):
#print(lifecycles[module.name]["mode"])
if lifecycles[module.name]["mode"] == "continuous":
while lifecycles[module.name]["mode"] == "continuous":
print(lifecycles)
outputs = executeContract(module)
#print(lifecycles)
time.sleep(module.sleeptime)
elif lifecycles[module.name]["mode"] == "oneshot":
print(lifecycles)
outputs = executeContract(module)
#print(lifecycles)
return
+2
View File
@@ -0,0 +1,2 @@
from . import server
Binary file not shown.
Binary file not shown.
Binary file not shown.
+17
View File
@@ -0,0 +1,17 @@
import importlib
from lifecyclemanager import manageLifecycle
from .dispatchstate import buildState
def buildDispatch(request):
dispatch = []
for key in request["module"]:
dispatch.append(request["module"][key])
resolveddispatch = "plugins."+ ".".join(dispatch)
module = importlib.import_module(resolveddispatch)
mode = request.get("mode", "oneshot")
return module, mode
+22
View File
@@ -0,0 +1,22 @@
from .createdispatch import buildDispatch
from .dispatchstate import buildState
from core.execution.createthread import buildThread
import threading
def dispatchRequest(request, lifecycles):
module, mode = buildDispatch(request)
mode, lifecycles = buildState(module, mode, lifecycles)
if mode == "stop":
return lifecycles
else:
threadnum, threadname, lifecycles, threadlist = buildThread(module, lifecycles)
#print("Active Threads")
#print(threadlist)
return threadnum, threadname, lifecycles, threadlist
+41
View File
@@ -0,0 +1,41 @@
import requests
from core import registerLifecycle
def filterMode(mode):
if mode in ("continuous", "oneshot", "stop"):
state = mode
return state
else: raise ValueError(f"Unsupported lifecycle mode: {mode}")
def buildState(module, mode, lifecycles):
state = filterMode(mode)
registryvalue = state
registryname = "mode"
if state != "stop":
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
elif state == "stop":
if not module.name in lifecycles:
print(f"No registered lifecycle: {module.name}")
return None
elif "mode" in lifecycles[module.name] != "stop":
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
print(f"Stopping lifecycle: {module.name}")
#elif mode == "oneshot":
#registryvalue = {"mode": "oneshot"}
#lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
# else:
#raise ValueError(f"Unsupported lifecycle mode: {mode}")
#state = registryvalue
return state, lifecycles
+30
View File
@@ -0,0 +1,30 @@
import socket
import json
def startServer():
from .dispatcher import dispatchRequest
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("127.0.0.1", 19002))
lifecycles = {}
server.listen()
while True:
connection, address = server.accept()
while True:
data = connection.recv(4096)
request = json.loads(data)
# if not data:
# break
dispatch = dispatchRequest(request, lifecycles)
connection.close()
# server.close()
-14
View File
@@ -1,14 +0,0 @@
from createdispatch import buildDispatch
from createthread import buildThread
from dispatchstate import buildState
import threading
def dispatchRequest(request, lifecycles):
module, mode = buildDispatch(request)
state, lifecycles = buildState(module, mode, lifecycles)
threadnum, threadname, lifecycles, activethreads = buildThread(module, state, lifecycles)
return threadnum, lifecycles,
-33
View File
@@ -1,33 +0,0 @@
import requests
from lifecycleregistry import registerLifecycle
def buildState(module, mode, lifecycles):
registryname = "state"
if mode == "continuous":
registryvalue = {"mode": "continuous"}
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
elif mode == "stop":
if not module.name in lifecycles:
registryvalue ={}
print(f"No registered lifecycle: {module.name}")
return None
elif lifecycles[module.name]["state"]["mode"] != "stop":
state = lifecycles[module.name]["state"]
state["mode"] = "stop"
#lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
print(f"Stopping lifecycle: {module.name}")
elif mode == "oneshot":
registryvalue = {"mode": "oneshot"}
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
else:
raise ValueError(f"Unsupported lifecycle mode: {mode}")
state = registryvalue
return state, lifecycles
+3
View File
@@ -0,0 +1,3 @@
from core.server.server import startServer
startServer()
-19
View File
@@ -1,19 +0,0 @@
import time
from core.execution.operation import buildOperation
from core.execution.action import buildAction
from core import executeContract
def manageLifecycle(module, state):
print(state)
if state["mode"] == "continuous":
while state["mode"] == "continuous":
outputs = executeContract(module)
time.sleep(module.sleeptime)
elif state["mode"] == "oneshot":
outputs = executeContract(module)
return
+12
View File
@@ -0,0 +1,12 @@
def lifecycleMonitor(lifecycles):
while True
print("Active Threads:")
#if not exists module.name in lifecycles:
#print("No active threads")
if exists module.name in lifecyles
for item in lifecycles[module.name]
if item == "thread".__name__:
print(item)
else:
print("No active threads"
+1 -1
View File
@@ -10,7 +10,7 @@ actions = [
setavailable,
]
sleeptime = 180
sleeptime = 10
skipstep = {
setavailable: {
+30
View File
@@ -0,0 +1,30 @@
import threading
from lifecycleregistry import registerLifecycle
from lifecyclemanager import manageLifecycle
threadlist = []
threadnum = 0
def buildThread(module, lifecycles):
global threadnum
threadnum += 1
threadname = f"thread.{threadnum}"
thread = threading.Thread(
target=manageLifecycle,
args=(module, lifecycles)
)
thread.start()
registryname = threadname
registryvalue = thread
lifecycles = registerLifecycle (module, lifecycles, registryname, registryvalue)
threadlist.append(thread)
print(threadlist)
print(lifecycles)
return threadnum, threadname, lifecycles, threadlist
+22
View File
@@ -0,0 +1,22 @@
from createdispatch import buildDispatch
from createthread import buildThread
from dispatchstate import buildState
import threading
def dispatchRequest(request, lifecycles):
module, mode = buildDispatch(request)
mode, lifecycles = buildState(module, mode, lifecycles)
if mode == "stop":
return lifecycles
else:
threadnum, threadname, lifecycles, threadlist = buildThread(module, lifecycles)
#print("Active Threads")
#print(threadlist)
return threadnum, threadname, lifecycles, threadlist
+41
View File
@@ -0,0 +1,41 @@
import requests
from lifecycleregistry import registerLifecycle
def filterMode(mode):
if mode in ("continuous", "oneshot", "stop"):
state = mode
return state
else: raise ValueError(f"Unsupported lifecycle mode: {mode}")
def buildState(module, mode, lifecycles):
state = filterMode(mode)
registryvalue = state
registryname = "mode"
if state != "stop":
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
elif state == "stop":
if not module.name in lifecycles:
print(f"No registered lifecycle: {module.name}")
return None
elif "mode" in lifecycles[module.name] != "stop":
lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
print(f"Stopping lifecycle: {module.name}")
#elif mode == "oneshot":
#registryvalue = {"mode": "oneshot"}
#lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue)
# else:
#raise ValueError(f"Unsupported lifecycle mode: {mode}")
#state = registryvalue
return state, lifecycles
+25
View File
@@ -0,0 +1,25 @@
import time
from core.execution.operation import buildOperation
from core.execution.action import buildAction
from core import executeContract
def manageLifecycle(module, lifecycles): #lifecycles, state):
#print(lifecycles[module.name]["mode"])
if lifecycles[module.name]["mode"] == "continuous":
while lifecycles[module.name]["mode"] == "continuous":
print(lifecycles)
outputs = executeContract(module)
#print(lifecycles)
time.sleep(module.sleeptime)
elif lifecycles[module.name]["mode"] == "oneshot":
print(lifecycles)
outputs = executeContract(module)
#print(lifecycles)
return
+8
View File
@@ -0,0 +1,8 @@
def registerLifecycle(module, lifecycles, registryname, registryvalue):
if module.name not in lifecycles:
lifecycles[module.name] = {}
lifecycles[module.name][registryname] = registryvalue
return lifecycles
View File
View File
+2 -2
View File
@@ -1,6 +1,7 @@
import socket
import json
from dispatcher import dispatchRequest
#from createthread import buildThread
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -10,10 +11,9 @@ lifecycles = {}
server.listen()
#lifecycles = {}
while True:
connection, address = server.accept()
while True:
data = connection.recv(4096)