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

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


BO ZHANG's avatar
BO ZHANG committed
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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()  # 确保关闭连接


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

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

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

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


BO ZHANG's avatar
BO ZHANG committed
89
dfs = DFS(location=None)