<reponame>kknet/hikyuu<gh_stars>1000+
#!/usr/bin/python
# -*- coding: utf8 -*-
# cp936
#
# The MIT License (MIT)
#
# Copyright (c) 2021 hikyuu.org
#
# Create on: 2021-03-23
#    Author: fasiondog

import os, sys, subprocess
import requests, json
from hkucmd import HKUShell
from hikyuu.util.check import hku_catch

g_server_url = "http://127.0.0.1:520/hku"
g_api_version = "v1"
g_token = None


def get_url(service, api):
    return "{}/{}/{}/{}".format(g_server_url, service, g_api_version, api)


def login():
    data = json.dumps({'user': 'hku'})
    url = get_url('login', 'login')
    r = requests.post(url, data)
    global g_token
    g_token = r.json()['hku_token']


def logout():
    url = get_url('login', 'logout')
    r = requests.post(url, data)


def get_token():
    global g_token
    if g_token is None:
        login()
    return g_token


def get_headers():
    headers = {"hku_token": get_token(), "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    return headers


@hku_catch()
def start_server():
    if HKUShell.server is not None:
        server_status()
        return
    target = 'hkuserver.exe' if sys.platform == 'win32' else 'hkuserver'
    if os.path.exists(target):
        HKUShell.server = subprocess.Popen([target])
        return

    platform = 'windows'
    if sys.platform == 'linux':
        platform = 'linux'
    elif sys.platform == 'darwin':
        platform = 'macosx'
    target = "./build/release/{}/x64/lib/{}".format(platform, target)
    if os.path.exists(target):
        HKUShell.server = subprocess.Popen([target])
        return

    try:
        import hikyuu as hku
        target = "{}/cpp/{}".format(hku.__path__[0], target)
        if os.path.exists(target):
            HKUShell.server = subprocess.Popen([target])
    except:
        print("Can't found {}".format(target))


def stop_server():
    if HKUShell.server:
        HKUShell.server.terminate()
        HKUShell.server.wait()
        HKUShell.server = None
        print("server stopped.")


def server_status():
    if HKUShell.server is None:
        print("server stopped.")
        return
    url = get_url('assist', 'status')
    headers = get_headers()
    r = requests.get(url, headers=headers)
    print(r.json())


def set_server_logger_level(logger, level):
    url = get_url('assist', 'log_level')
    headers = get_headers()
    data = {'logger': logger, 'level': int(level)} if logger is not None else {'level': int(level)}
    r = requests.post(url, data, headers=headers)
    print(r.json())


def server(self, args):
    """
    start: 启动服务，无参数时，默认为start
    stop: 停止服务
    status: 查看当前服务器运行状态
    set_logger_level: 设置 logger 级别 
        logger(str): （可选）logger 名称
        level(int): 打印级别
    """
    if args == "":
        start_server()
    x = args.split()
    if not x or x[0] == 'status':
        server_status()
    elif x[0] == 'stop':
        stop_server()
    elif x[0] == 'set_logger_level':
        if len(x) == 2:
            set_server_logger_level(None, x[1])
        else:
            set_server_logger_level(x[1], x[2])

#!/usr/bin/python
# -*- coding: utf8 -*-
# cp936
#
# The MIT License (MIT)
#
# Copyright (c) 2021 hikyuu.org
#
# Create on: 2021-03-23
#    Author: fasiondog

import os, sys, subprocess
import requests, json
from hkucmd import HKUShell
from hikyuu.util.check import hku_catch

g_server_url = "http://127.0.0.1:520/hku"
g_api_version = "v1"
g_token = None


def get_url(service, api):
    return "{}/{}/{}/{}".format(g_server_url, service, g_api_version, api)


def login():
    data = json.dumps({'user': 'hku'})
    url = get_url('login', 'login')
    r = requests.post(url, data)
    global g_token
    g_token = r.json()['hku_token']


def logout():
    url = get_url('login', 'logout')
    r = requests.post(url, data)


def get_token():
    global g_token
    if g_token is None:
        login()
    return g_token


def get_headers():
    headers = {"hku_token": get_token(), "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
    return headers


@hku_catch()
def start_server():
    if HKUShell.server is not None:
        server_status()
        return
    target = 'hkuserver.exe' if sys.platform == 'win32' else 'hkuserver'
    if os.path.exists(target):
        HKUShell.server = subprocess.Popen([target])
        return

    platform = 'windows'
    if sys.platform == 'linux':
        platform = 'linux'
    elif sys.platform == 'darwin':
        platform = 'macosx'
    target = "./build/release/{}/x64/lib/{}".format(platform, target)
    if os.path.exists(target):
        HKUShell.server = subprocess.Popen([target])
        return

    try:
        import hikyuu as hku
        target = "{}/cpp/{}".format(hku.__path__[0], target)
        if os.path.exists(target):
            HKUShell.server = subprocess.Popen([target])
    except:
        print("Can't found {}".format(target))


def stop_server():
    if HKUShell.server:
        HKUShell.server.terminate()
        HKUShell.server.wait()
        HKUShell.server = None
        print("server stopped.")


def server_status():
    if HKUShell.server is None:
        print("server stopped.")
        return
    url = get_url('assist', 'status')
    headers = get_headers()
    r = requests.get(url, headers=headers)
    print(r.json())


def set_server_logger_level(logger, level):
    url = get_url('assist', 'log_level')
    headers = get_headers()
    data = {'logger': logger, 'level': int(level)} if logger is not None else {'level': int(level)}
    r = requests.post(url, data, headers=headers)
    print(r.json())


def server(self, args):
    """
    start: 启动服务，无参数时，默认为start
    stop: 停止服务
    status: 查看当前服务器运行状态
    set_logger_level: 设置 logger 级别 
        logger(str): （可选）logger 名称
        level(int): 打印级别
    """
    if args == "":
        start_server()
    x = args.split()
    if not x or x[0] == 'status':
        server_status()
    elif x[0] == 'stop':
        stop_server()
    elif x[0] == 'set_logger_level':
        if len(x) == 2:
            set_server_logger_level(None, x[1])
        else:
            set_server_logger_level(x[1], x[2])
#!/usr/bin/python # -*- coding: utf8 -*- # cp936 # # The MIT License (MIT) # # Copyright (c) 2021 hikyuu.org # # Create on: 2021-03-23 #    Author: fasiondog start: 启动服务，无参数时，默认为start     stop: 停止服务     status: 查看当前服务器运行状态     set_logger_level: 设置 logger 级别          logger(str): （可选）logger 名称         level(int): 打印级别