import logging import signal import sys from gevent import monkey monkey.patch_all() from gevent import pool import json import dotmap from kubernetes import client from src import cases, consts, util, inspector from src import suspicions from src.context import get_infra_api_cli CR_GROUP = "cloud.pingcap.com" CR_VERSION = "v1" logger = logging.getLogger("oncall_master.main") gp = pool.Pool(20) def run_test_case(): v = suspicions.Verifier() params = { "cluster_id": "3840787", "project_id": "43562", "tenant_id": "30060", "network_name": "eks-us-west-2", "case_id": "case1", } case1 = cases.TheProjectsFirstInfraClusterCreationDurationTooLong(**params) v.verify(case1.build_ctx(), case1.get_suspicions()) def inspect_networks(): infra_api_k8s_cli = get_infra_api_cli() cr_api = client.CustomObjectsApi(api_client=infra_api_k8s_cli) label_selector = { consts.LabelServiceType: 'dedicated', } networks = util.list_cluster_crs(cr_api, CR_GROUP, CR_VERSION, "networks", label_selector=util.build_label_selector(label_selector), ) logger.info(f'there are {len(networks)} networks') results = [] for network in networks: gp.spawn(_inspect_one_network, results, network) gp.join() with open('inspect_on_networks_result.json', 'w') as f: json.dump(results, f, indent=2) def _inspect_one_network(results: list, network: dotmap.DotMap) -> suspicions.Verifier: v = suspicions.Verifier() ins = inspector.NetworkInspector(network.metadata.namespace, network.metadata.name) ctx = dotmap.DotMap({ "project_id": network.metadata.labels[consts.LabelProjectId], "tenant_id": network.metadata.labels[consts.LabelTenantId], "network_name": network.metadata.name, "namespace": network.metadata.namespace, }) if v.verify(ctx, ins.inspect()): results.append({ "name": network.metadata.name, "namespace": network.metadata.namespace, "phase": network.status.phase, "solutions": [each.__dict__ for each in v.solutions], "info": v.info, }) return v def inspect_one_network(): infra_api_k8s_cli = get_infra_api_cli() cr_api = client.CustomObjectsApi(api_client=infra_api_k8s_cli) network = util.get_namespaced_cr( cr_api, CR_GROUP, CR_VERSION, 'staging-1369847559693947286', "networks", 'eks-us-west-2', ) results = [] _inspect_one_network(results, network) with open('inspect_on_networks_result.json', 'w') as f: json.dump(results, f, indent=2) def handler_int(signum, frame): signame = signal.Signals(signum).name logger.warning(f'Signal handler called with signal {signame} ({signum})') sys.exit(-1) def main(): signal.signal(signal.SIGINT, handler_int) # run_test_case() inspect_networks() # inspect_one_network() if __name__ == '__main__': main()