fc-server 0.7.2__tar.gz → 0.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fc-server-0.7.2 → fc-server-0.7.4}/PKG-INFO +1 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_client/Dockerfile +1 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_guarder/Dockerfile +1 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_server/Dockerfile +1 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_client/client.py +53 -0
- fc-server-0.7.4/fc_common/VERSION +1 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/api_svr.py +16 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/coordinator.py +1 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/PKG-INFO +1 -1
- fc-server-0.7.2/fc_common/VERSION +0 -1
- {fc-server-0.7.2 → fc-server-0.7.4}/.QualityGate +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/.github/workflows/main.yml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/.gitignore +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/.pylintrc +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/.readthedocs.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/LICENSE +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/README.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/SCR-fc.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/black.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/docker.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/package.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/publish_docker.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/pylint.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/pytest.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/ci/setup.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/Makefile +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/conf.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/configuration.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/css/css-style.css +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/images/architecture.svg +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/images/era.svg +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/images/fc.png +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/images/flowchart.svg +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/images/principle.svg +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/index.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/make.bat +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/overview.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/quickstart.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/support.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/doc/usage.rst +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_client/fc-client +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_guarder/docker-compose.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_guarder/entrypoint.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_guarder/sample.env +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_server/docker-compose.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/docker/fc_server/entrypoint.sh +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_client/sample_client.env +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_client_daemon/client_daemon.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_client_docker/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_client_docker/fc_client_docker +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_common/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_common/config.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_common/etcd.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_common/logger.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_common/version.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_guarder/guarder.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/config/sample_cfg.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/config/sample_lavacli.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/config/sample_resource.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/config.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/decorators.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/core/plugin.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/management/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/management/cmd_online_lava_devices.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/management/common.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/labgrid.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/lava.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/utils/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/utils/labgrid.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/plugins/utils/lava.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server/server.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/SOURCES.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/dependency_links.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/entry_points.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/requires.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server.egg-info/top_level.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server_daemon/__init__.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/fc_server_daemon/server_daemon.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/requirements/ci-requirements.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/requirements/client-requirements.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/requirements/doc-requirements.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/requirements/server-requirements.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/requirements.txt +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/setup.cfg +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/setup.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/conftest.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_client/test_client.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_guarder/conftest.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_guarder/test_guarder.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/config/cfg.yaml +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/conftest.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/test_config.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/test_coordinator.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/test_misc.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/test_plugin_labgrid.py +0 -0
- {fc-server-0.7.2 → fc-server-0.7.4}/tests/fc_server/test_plugin_lava.py +0 -0
|
@@ -516,6 +516,52 @@ class Client:
|
|
|
516
516
|
else:
|
|
517
517
|
sys.exit("No resource specified.")
|
|
518
518
|
|
|
519
|
+
@staticmethod
|
|
520
|
+
def monitor(args):
|
|
521
|
+
records = set()
|
|
522
|
+
|
|
523
|
+
async def subscribe(instance_meta):
|
|
524
|
+
fc_server_name = instance_meta[0]
|
|
525
|
+
fc_server = instance_meta[1].get("fc", None)
|
|
526
|
+
print(f"Subscribing to {fc_server} for events...")
|
|
527
|
+
records.add(fc_server)
|
|
528
|
+
|
|
529
|
+
try:
|
|
530
|
+
async with aiohttp.ClientSession() as session:
|
|
531
|
+
async with session.ws_connect(
|
|
532
|
+
f"{fc_server}/ws"
|
|
533
|
+
) as ws: # pylint: disable=invalid-name
|
|
534
|
+
async for msg in ws:
|
|
535
|
+
if msg.type == aiohttp.WSMsgType.TEXT:
|
|
536
|
+
print(f"{fc_server_name}({fc_server}) - {msg.data}")
|
|
537
|
+
if "callback" in args and callable(args.callback):
|
|
538
|
+
if asyncio.iscoroutinefunction(args.callback):
|
|
539
|
+
await args.callback(msg.data)
|
|
540
|
+
else:
|
|
541
|
+
args.callback(msg.data)
|
|
542
|
+
except aiohttp.ClientError as exc:
|
|
543
|
+
print(f"Error connecting to {fc_server}: {exc}")
|
|
544
|
+
|
|
545
|
+
print(f"Unsubscribing from {fc_server}")
|
|
546
|
+
records.remove(fc_server)
|
|
547
|
+
await session.close()
|
|
548
|
+
|
|
549
|
+
async def start_monitor():
|
|
550
|
+
while True:
|
|
551
|
+
metadata = Client.fetch_metadata("all")
|
|
552
|
+
for instance_meta in metadata.items():
|
|
553
|
+
fc_server = instance_meta[1]["fc"]
|
|
554
|
+
if fc_server not in records:
|
|
555
|
+
asyncio.create_task(subscribe(instance_meta))
|
|
556
|
+
|
|
557
|
+
await asyncio.sleep(60)
|
|
558
|
+
|
|
559
|
+
loop = asyncio.get_event_loop()
|
|
560
|
+
if loop.is_running():
|
|
561
|
+
asyncio.create_task(start_monitor())
|
|
562
|
+
else:
|
|
563
|
+
loop.run_until_complete(start_monitor())
|
|
564
|
+
|
|
519
565
|
|
|
520
566
|
class VerbosityAction(argparse.Action):
|
|
521
567
|
def __call__(self, parser, namespace, values, option_string=None):
|
|
@@ -567,6 +613,8 @@ def main():
|
|
|
567
613
|
"c",
|
|
568
614
|
"init",
|
|
569
615
|
"i",
|
|
616
|
+
"monitor",
|
|
617
|
+
"m",
|
|
570
618
|
]
|
|
571
619
|
or not args.resource
|
|
572
620
|
):
|
|
@@ -612,6 +660,11 @@ def main():
|
|
|
612
660
|
subparser = subparsers.add_parser("init", aliases=("i",), help="init fc-client")
|
|
613
661
|
subparser.set_defaults(func=Client.init)
|
|
614
662
|
|
|
663
|
+
subparser = subparsers.add_parser(
|
|
664
|
+
"monitor", aliases=("m",), help="monitor event"
|
|
665
|
+
)
|
|
666
|
+
subparser.set_defaults(func=Client.monitor)
|
|
667
|
+
|
|
615
668
|
if len(extras) > 0 and extras[0] in ["init", "i"]:
|
|
616
669
|
args, extras = parser.parse_known_args(extras, namespace=args)
|
|
617
670
|
Client.action(args.func, extras)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.7.4
|
|
@@ -116,6 +116,9 @@ class ApiSvr(AsyncRunMixin):
|
|
|
116
116
|
resources_info = []
|
|
117
117
|
tool_command_list = []
|
|
118
118
|
for resource, status in self.context.managed_resources_status.items():
|
|
119
|
+
if status == "retired":
|
|
120
|
+
continue
|
|
121
|
+
|
|
119
122
|
if scope != ["all"] and resource not in scope:
|
|
120
123
|
continue
|
|
121
124
|
|
|
@@ -352,6 +355,9 @@ class ApiSvr(AsyncRunMixin):
|
|
|
352
355
|
|
|
353
356
|
tool_command_list = []
|
|
354
357
|
for resource, status in self.context.managed_resources_status.items():
|
|
358
|
+
if status == "retired":
|
|
359
|
+
continue
|
|
360
|
+
|
|
355
361
|
if scope != ["all"] and resource not in scope:
|
|
356
362
|
continue
|
|
357
363
|
|
|
@@ -433,6 +439,8 @@ class ApiSvr(AsyncRunMixin):
|
|
|
433
439
|
request.app["ws"].discard(ws_resp)
|
|
434
440
|
logger.info(f"Subscriber {request.remote} leave")
|
|
435
441
|
|
|
442
|
+
return ws_resp
|
|
443
|
+
|
|
436
444
|
async def publisher(self, app):
|
|
437
445
|
logger = app["logger"]
|
|
438
446
|
|
|
@@ -442,7 +450,14 @@ class ApiSvr(AsyncRunMixin):
|
|
|
442
450
|
candidates = []
|
|
443
451
|
for ws_resp in set(app["ws"]):
|
|
444
452
|
logger.info(f"Send {msg} to subscriber")
|
|
445
|
-
|
|
453
|
+
msg_str = msg if isinstance(msg, str) else None
|
|
454
|
+
if msg_str is None:
|
|
455
|
+
try:
|
|
456
|
+
msg_str = json.dumps(msg)
|
|
457
|
+
except (TypeError, ValueError) as exc:
|
|
458
|
+
logger.error(f"Failed to serialize message: {exc}")
|
|
459
|
+
continue
|
|
460
|
+
candidates.append(ws_resp.send_str(msg_str))
|
|
446
461
|
await asyncio.gather(*candidates)
|
|
447
462
|
|
|
448
463
|
async def on_startup(self, app):
|
|
@@ -322,7 +322,7 @@ class Coordinator:
|
|
|
322
322
|
def __set_resource_status(self, resource, status):
|
|
323
323
|
self.__managed_resources_status[resource] = status
|
|
324
324
|
self.logger.info("* %s now belongs to %s", resource, status)
|
|
325
|
-
asyncio.create_task(self.publisher_queue.put(resource
|
|
325
|
+
asyncio.create_task(self.publisher_queue.put({resource: status}))
|
|
326
326
|
|
|
327
327
|
async def return_resource(self, resource):
|
|
328
328
|
if (
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.7.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|