Eureka命令行管理脚本,查看上线下线服务

Posted Jamin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eureka命令行管理脚本,查看上线下线服务相关的知识,希望对你有一定的参考价值。

Eureka命令行管理脚本

效果

[root@local-vm ~]# 【1.查看服务】
[root@local-vm ~]# python3.6 eurekaAdmin.py -a test-app
[2021-06-16 11:35:29] - param[appID=test-app,instance=,do=]
————————————————————————————————————————————————http://192.168.1.10:8600—————————————————————————————————————————
| application          | instance                                          | ip               | status               | lastTime   |
| test-app   | 192.168.1.100:test-app:8001           | 192.168.1.100       | UP          | 2021-06-16 11:35:38 |
| test-app   | 192.168.1.101:test-app:8001           | 192.168.1.101       | UP          | 2021-06-16 11:35:35 |
[root@local-vm ~]# 
[root@local-vm ~]# 【2.下线服务】
[root@local-vm ~]# python3.6 eurekaAdmin.py -a test-app -i 192.168.1.100:test-app:8001 -d down
[2021-06-16 11:35:46] - param[appID=test-app,instance=192.168.1.100:test-app:8001,do=down]
request: http://192.168.1.10:8600/eureka/apps/test-app/192.168.1.100:test-app:8001/status?value=DOWN
————————————————————————————————————————————————http://192.168.1.10:8600—————————————————————————————————————————
| application          | instance                                          | ip               | status               | lastTime   |
| test-app   | 192.168.1.100:test-app:8001           | 192.168.1.100       | DOWN        | 2021-06-16 11:35:56 |
| test-app   | 192.168.1.101:test-app:8001           | 192.168.1.101       | UP          | 2021-06-16 11:35:56 |
[root@local-vm ~]# 
[root@local-vm ~]# 
[root@local-vm ~]# 【3.上线服务】
[root@local-vm ~]# python3.6 eurekaAdmin.py -a test-app -i 192.168.1.100:test-app:8001 -d up
[2021-06-16 11:36:07] - param[appID=test-app,instance=192.168.1.100:test-app:8001,do=up]
request: http://192.168.1.10:8600/eureka/apps/test-app/192.168.1.100:test-app:8001/status?value=UP
————————————————————————————————————————————————http://192.168.1.10:8600—————————————————————————————————————————
| application          | instance                                          | ip               | status               | lastTime   |
| test-app   | 192.168.1.100:test-app:8001           | 192.168.1.100       | UP          | 2021-06-16 11:36:18 |
| test-app   | 192.168.1.101:test-app:8001           | 192.168.1.101       | UP          | 2021-06-16 11:36:16 |

源码

# -*- coding: utf-8 -*-
# author by Jamin

\'\'\'
1. 查看服务
python3.6 eurekaAdmin.py -a test-app

2. 下线服务
python3.6 eurekaAdmin.py -a test-app -i (1步骤中查到的Instance) -d down

3. 上线服务
python3.6 eurekaAdmin.py -a test-app -i (1步骤中查到的Instance) -d up
\'\'\'

import requests
import json
import sys
import getopt
import time

def usage():
    """show help"""
    f = sys.argv[0].split(\'/\')
    print ("Usage: ",f[len(f)-1]," -a <eurekaAppId> -i <eurenaInstanceId> -d <[down | up]>")

class eureka():
    """
    Eureka CLI Admin
    支持CLI查看和上下线服务
    """
    def __init__(self, eurekaHost = []):
        self.appId = \'\'
        self.instance = \'\'
        self.action = \'\'
        self.eurekaHost = eurekaHost
        self.RED = \'\\033[91m\'
        self.GREEN = \'\\033[92m\'
        self.END = \'\\033[0m\'
        self.TEMPLATE = \'| %-20s | %-45s | %-16s | %-20s | %-10s |\'
        

    def getPath(self, host, path):
        return "%s/eureka/apps/%s" % (host, path)

    def getEruekaConfig(self, host):
        url = self.getPath(host,self.appId)

        payload="{}"
        headers = {
            \'Accept\': \'application/json\'
        }
        try:
            response = requests.request("GET", url, headers=headers, data=payload)

            if response.ok is False:
                print(self.RED,"error:",self.END,response)
                return
            data = json.loads(response.text)
            print (self.TEMPLATE % ("application","instance","ip","status","lastTime")) 

            for _ in data[\'application\'][\'instance\']:
                color = self.GREEN if _[\'status\'] == \'UP\' else self.RED
                dateymd = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(_[\'leaseInfo\'][\'lastRenewalTimestamp\']/1000))
                print (self.TEMPLATE % (_[\'app\'],_[\'instanceId\'],_[\'ipAddr\'],(color + _[\'status\'] + self.END), dateymd)) 

        except Exception:
            print(self.RED,"error:",self.END,url)
            return



    def setEruekaConfig(self, host):
        self.action = self.action.upper()
        if self.action == \'DOWN\' or self.action == \'UP\':
            url = self.getPath(host,"%s/%s/status?value=%s" % (self.appId,self.instance,self.action))
            payload="{}"
            headers = {
                \'Accept\': \'application/json\'
            }
            response = requests.request("PUT", url, headers=headers, data=payload)
            print("request:",url)
            if response.ok is False:
                print(self.RED,"error:",self.END,response)

            time.sleep(1.5)
            self.getAllEurekaConfig()
        else:
            print("param error:",self.action)
            usage()

    def main(self, argv):
        try:
            opts, args = getopt.getopt(argv,"ha:i:d:",["app=","instance=","do="])
        except getopt.GetoptError:
            usage()
            sys.exit(2)
        for opt, arg in opts:
            if opt == \'-h\' or opt == \'--help\':
                usage()
                sys.exit()
            elif opt in ("-a", "--app"):
                self.appId = arg
            elif opt in ("-d", "--do"):
                self.action = arg
            elif opt in ("-i", "--instance"):
                self.instance = arg
        
        print(\'[%s] - param[appID=%s,instance=%s,do=%s]\' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), self.appId,self.instance,self.action))

        if self.appId != \'\' and self.action!=\'\' and self.instance!=\'\':
            self.setEruekaConfig(self.eurekaHost[0])
        elif self.appId!=\'\':
            self.getAllEurekaConfig()
    
    def getAllEurekaConfig(self):
        for _ in self.eurekaHost:
            print("————————————————————————————————————————————————%s—————————————————————————————————————————" % _)
            self.getEruekaConfig(_)

if __name__ == \'__main__\':
    """eureka 命令行管理程序"""
    if len(sys.argv) < 2:
        usage()
        sys.exit()
    else:
        eurekaHost = ["192.168.1.10:8600"]
        eureka(eurekaHost).main(sys.argv[1:])

以上是关于Eureka命令行管理脚本,查看上线下线服务的主要内容,如果未能解决你的问题,请参考以下文章

Eureka服务下线后快速感知配置

Eureka服务下线(Cancel)源码分析

haproxy socat工具上线和下线后端服务器脚本

Eureka 参数调优

Eureka 系列(07)服务注册与主动下线

Eureka服务下线源码解析