__init__.py 4.3 KB
Newer Older
1
2
3
import redis
import toml
import os
BO ZHANG's avatar
BO ZHANG committed
4
from astropy.table import Table
BO ZHANG's avatar
BO ZHANG committed
5
import socket
BO ZHANG's avatar
BO ZHANG committed
6
from csst_dfs_client import plan, level0, level1, level2, dag, catalog
7

BO ZHANG's avatar
BO ZHANG committed
8
CONFIG = toml.load(os.path.join(os.path.dirname(__file__), "config.toml"))
9
10


BO ZHANG's avatar
BO ZHANG committed
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def check_port(ip, port, timeout=3):
    """
    # # 示例:检查 192.168.1.1 的 80 端口是否开放
    # print(check_port("192.168.1.1", 80))  # True/False
    """
    try:
        # 创建 Socket 连接(TCP)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(timeout)  # 设置超时时间(秒)
        # 尝试连接
        result = sock.connect_ex((ip, port))
        # 返回状态
        if result == 0:  # 0 表示成功
            return True
        else:
            return False
    except Exception as e:
        print(f"Error: {e}")
        return False
    finally:
        sock.close()  # 确保关闭连接


34
class DFS:
BO ZHANG's avatar
BO ZHANG committed
35
36
37
38
39
40
41
42

    plan = plan
    level0 = level0
    level1 = level1
    level2 = level2
    dag = dag
    catalog = catalog

BO ZHANG's avatar
BO ZHANG committed
43
44
    def __init__(self, location=None):
        # try each location
BO ZHANG's avatar
BO ZHANG committed
45
        print("Test all locations...", end="")
BO ZHANG's avatar
BO ZHANG committed
46
47
        status_list = []
        for loc in CONFIG.keys():
BO ZHANG's avatar
BO ZHANG committed
48
49
            dfs_ip = CONFIG[loc]["CSST_DFS_GATEWAY"].split(":")[0]
            dfs_port = int(CONFIG[loc]["CSST_DFS_GATEWAY"].split(":")[1])
BO ZHANG's avatar
BO ZHANG committed
50
51
            # redis_ip = CONFIG[loc]["redis"]["host"]
            # redis_port = CONFIG[loc]["redis"]["port"]
BO ZHANG's avatar
BO ZHANG committed
52
            this_dfs_status = check_port(dfs_ip, dfs_port, timeout=1)
BO ZHANG's avatar
BO ZHANG committed
53
            # this_redis_status = check_port(redis_ip, redis_port, timeout=1)
BO ZHANG's avatar
BO ZHANG committed
54
55
            this_status = dict(
                location=loc,
BO ZHANG's avatar
BO ZHANG committed
56
                status=this_dfs_status,  # and this_redis_status,
BO ZHANG's avatar
BO ZHANG committed
57
                dfs=this_dfs_status,
BO ZHANG's avatar
BO ZHANG committed
58
                # redis=this_redis_status,
BO ZHANG's avatar
BO ZHANG committed
59
60
            )
            status_list.append(this_status)
BO ZHANG's avatar
BO ZHANG committed
61
62
            # print(this_status)
        print("Done!\n")
BO ZHANG's avatar
BO ZHANG committed
63
64
        status_table = Table(status_list)
        print(status_table)
BO ZHANG's avatar
BO ZHANG committed
65
        print("\n")
BO ZHANG's avatar
BO ZHANG committed
66
        if status_table["status"].sum() == 0:
BO ZHANG's avatar
BO ZHANG committed
67
            print("No DFS location is available")
BO ZHANG's avatar
BO ZHANG committed
68
69
        elif status_table["status"].sum() > 1:
            print("Multiple DFS locations are available, please specify one")
BO ZHANG's avatar
BO ZHANG committed
70
71
72
73
        elif location is None:
            # set DFS automatically
            if status_table["status"].sum() == 1:
                print("One DFS locations are available, good")
BO ZHANG's avatar
BO ZHANG committed
74
                location = status_table["location"][status_table["status"]][0]
BO ZHANG's avatar
BO ZHANG committed
75
76
77
78
79
80
            elif status_table["status"].sum() == 0:
                print("No DFS location is available, using csu")
                location = "csu"
            else:
                raise ValueError("Multiple DFS locations are available")

BO ZHANG's avatar
BO ZHANG committed
81
            self.location = location
BO ZHANG's avatar
BO ZHANG committed
82
            self.config = CONFIG[self.location]
BO ZHANG's avatar
BO ZHANG committed
83

BO ZHANG's avatar
BO ZHANG committed
84
            for k, v in CONFIG[self.location].items():
BO ZHANG's avatar
BO ZHANG committed
85
86
                os.environ.setdefault(k, str(v))
            # print("Setting redis config:")
BO ZHANG's avatar
BO ZHANG committed
87
            # self.redis = Redis(location=self.location)
88
89


BO ZHANG's avatar
BO ZHANG committed
90
dfs = DFS(location=None)
91
92


BO ZHANG's avatar
BO ZHANG committed
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# class Redis(redis.Redis):
#     def __init__(self, location="naoc", **kwargs):
#         if location not in CONFIG.keys():
#             print("Available redis locations: ", list(CONFIG.keys()))
#             raise ValueError(f"Unknown redis location: {location}")
#         super().__init__(
#             host=CONFIG[location]["redis"]["host"],
#             port=CONFIG[location]["redis"]["port"],
#             db=CONFIG[location]["redis"]["db"],
#             password=CONFIG[location]["redis"]["password"],
#             **kwargs,
#         )
#         self.qname = password = CONFIG[location]["redis"]["qname"]
#         self.config = CONFIG[location]["redis"]
#         # print("Setting redis config:")
#         # for k, v in self.config.items():
#         #     print(f" - {k}: {v}")
#
#     def push(self, msg):
#         self.lpush(self.qname, msg)
#
#     def pop(self):
#         return self.rpop(self.qname)
#
#     def get_all(self):
#         return self.lrange(self.qname, 0, -1)
119

BO ZHANG's avatar
BO ZHANG committed
120

121
122
123
# msgs = r.lrange(name, 0, -1)
# for chipid in range(6, 26):
#     this_msg = gen_msg(
BO ZHANG's avatar
BO ZHANG committed
124
#         dag_cfg="csst-msc-l1-mbi", obsid="11009101682009", chipid=f"{chipid:02d}"
125
126
127
128
129
130
131
132
133
#     )
#     print(this_msg)
#     r.lpush(name, this_msg)
#
# msgs = r.lrange(name, 0, -1)
# print(msgs)
#
# msgs_later = r.lrange(name, 0, -1)
# print(msgs_later)