From 1f04c2b84f77af6a132a5b4fa16f91b5e5a3d799 Mon Sep 17 00:00:00 2001 From: midoks Date: Fri, 29 Jan 2021 18:05:43 +0800 Subject: [PATCH] swap --- plugins/swap/ico.png | Bin 0 -> 468 bytes plugins/swap/index.html | 16 +++ plugins/swap/index.py | 221 +++++++++++++++++++++++++++++++++++ plugins/swap/info.json | 17 +++ plugins/swap/init.d/swap.tpl | 73 ++++++++++++ plugins/swap/install.sh | 45 +++++++ 6 files changed, 372 insertions(+) create mode 100644 plugins/swap/ico.png create mode 100755 plugins/swap/index.html create mode 100755 plugins/swap/index.py create mode 100755 plugins/swap/info.json create mode 100644 plugins/swap/init.d/swap.tpl create mode 100755 plugins/swap/install.sh diff --git a/plugins/swap/ico.png b/plugins/swap/ico.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff64f09e2721c01d5c104a0833a96ffc3cdd8ee GIT binary patch literal 468 zcmV;_0W1EAP)U%iSI`F0&u#Nz>hm@EWlB*=NwQ1SFyQtqrJ*b7lF09m5LZffR{;uANML<0^pB} z?-|f8-t+>#0pO2o`c9uy2q-9%u<~N^YB`B1fqN+jo-qPEW5l^dl`aA%T1%CG?EuTi z?gz_9YkLzVR0Jm7F074q{|g0dOzA=ad38gC5wM8b+q<(^xbX?VP4D2@I}0gZ_E^yx zB3*Z2^A2RI-m0>&JD>#40kBRp)*XNk0Zt*1`K9&=;4GU!_Lo}9G}MxO*74d# zXtrM+pNYq3o0ar@D^^Gsnt~hXv0CLUqy+e^-wZm*_PDy3zzcxunVb3y;CBDsOJGT? zgOt{4k6|6G2!u&F2viOX3Kw>)90-$g5U3m&6fW#oIS?l0AkZ(KIe0N97MQ~T0000< KMNUMnLSTYNX~xX} literal 0 HcmV?d00001 diff --git a/plugins/swap/index.html b/plugins/swap/index.html new file mode 100755 index 000000000..8711087f3 --- /dev/null +++ b/plugins/swap/index.html @@ -0,0 +1,16 @@ +
+
+
+

服务

+

自启动

+

配置修改

+

日志

+
+
+
+
+
+
+ \ No newline at end of file diff --git a/plugins/swap/index.py b/plugins/swap/index.py new file mode 100755 index 000000000..482a63778 --- /dev/null +++ b/plugins/swap/index.py @@ -0,0 +1,221 @@ +# coding:utf-8 + +import sys +import io +import os +import time + +sys.path.append(os.getcwd() + "/class/core") +import mw + +app_debug = False +if mw.isAppleSystem(): + app_debug = True + + +def getPluginName(): + return 'swap' + + +def getPluginDir(): + return mw.getPluginDir() + '/' + getPluginName() + + +def getServerDir(): + return mw.getServerDir() + '/' + getPluginName() + + +def getInitDFile(): + if app_debug: + return '/tmp/' + getPluginName() + return '/etc/init.d/' + getPluginName() + + +def getConf(): + path = getPluginDir() + "/config/redis.conf" + return path + + +def getInitDTpl(): + path = getPluginDir() + "/init.d/" + getPluginName() + ".tpl" + return path + + +def getArgs(): + args = sys.argv[2:] + tmp = {} + args_len = len(args) + + if args_len == 1: + t = args[0].strip('{').strip('}') + t = t.split(':') + tmp[t[0]] = t[1] + elif args_len > 1: + for i in range(len(args)): + t = args[i].split(':') + tmp[t[0]] = t[1] + + return tmp + + +def status(): + data = mw.execShell( + "ps -ef|grep swap |grep -v grep | grep -v python | grep -v mdserver-web | awk '{print $2}'") + + if data[0] == '': + return 'stop' + return 'start' + + +def initDreplace(): + + file_tpl = getInitDTpl() + service_path = os.path.dirname(os.getcwd()) + + initD_path = getServerDir() + '/init.d' + if not os.path.exists(initD_path): + os.mkdir(initD_path) + file_bin = initD_path + '/' + getPluginName() + + # initd replace + content = mw.readFile(file_tpl) + content = content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(file_bin, content) + mw.execShell('chmod +x ' + file_bin) + + # config replace + conf_content = mw.readFile(getConf()) + conf_content = conf_content.replace('{$SERVER_PATH}', service_path) + mw.writeFile(getServerDir() + '/redis.conf', conf_content) + + return file_bin + + +def start(): + file = initDreplace() + data = mw.execShell(file + ' start') + if data[1] == '': + return 'ok' + return 'fail' + + +def stop(): + file = initDreplace() + data = mw.execShell(file + ' stop') + if data[1] == '': + return 'ok' + return 'fail' + + +def restart(): + file = initDreplace() + data = mw.execShell(file + ' restart') + log_file = getServerDir() + "/data/redis.log" + mw.execShell("echo '' > " + log_file) + if data[1] == '': + return 'ok' + return 'fail' + + +def reload(): + file = initDreplace() + data = mw.execShell(file + ' reload') + if data[1] == '': + return 'ok' + return 'fail' + + +def runInfo(): + cmd = getServerDir() + "/bin/redis-cli info" + data = mw.execShell(cmd)[0] + res = [ + 'tcp_port', + 'uptime_in_days', # 已运行天数 + 'connected_clients', # 连接的客户端数量 + 'used_memory', # Redis已分配的内存总量 + 'used_memory_rss', # Redis占用的系统内存总量 + 'used_memory_peak', # Redis所用内存的高峰值 + 'mem_fragmentation_ratio', # 内存碎片比率 + 'total_connections_received', # 运行以来连接过的客户端的总数量 + 'total_commands_processed', # 运行以来执行过的命令的总数量 + 'instantaneous_ops_per_sec', # 服务器每秒钟执行的命令数量 + 'keyspace_hits', # 查找数据库键成功的次数 + 'keyspace_misses', # 查找数据库键失败的次数 + 'latest_fork_usec' # 最近一次 fork() 操作耗费的毫秒数 + ] + data = data.split("\n") + result = {} + for d in data: + if len(d) < 3: + continue + t = d.strip().split(':') + if not t[0] in res: + continue + result[t[0]] = t[1] + return mw.getJson(result) + + +def initdStatus(): + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + initd_bin = getInitDFile() + if os.path.exists(initd_bin): + return 'ok' + return 'fail' + + +def initdInstall(): + import shutil + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + + source_bin = initDreplace() + initd_bin = getInitDFile() + shutil.copyfile(source_bin, initd_bin) + mw.execShell('chmod +x ' + initd_bin) + mw.execShell('chkconfig --add ' + getPluginName()) + return 'ok' + + +def initdUinstall(): + if not app_debug: + if mw.isAppleSystem(): + return "Apple Computer does not support" + + mw.execShell('chkconfig --del ' + getPluginName()) + initd_bin = getInitDFile() + os.remove(initd_bin) + return 'ok' + + +def runLog(): + return getServerDir() + '/data/redis.log' + +if __name__ == "__main__": + func = sys.argv[1] + if func == 'status': + print status() + elif func == 'start': + print start() + elif func == 'stop': + print stop() + elif func == 'restart': + print restart() + elif func == 'reload': + print reload() + elif func == 'initd_status': + print initdStatus() + elif func == 'initd_install': + print initdInstall() + elif func == 'initd_uninstall': + print initdUinstall() + elif func == 'run_info': + print runInfo() + elif func == 'conf': + print getConf() + elif func == 'run_log': + print runLog() + else: + print 'error' diff --git a/plugins/swap/info.json b/plugins/swap/info.json new file mode 100755 index 000000000..8511f7d01 --- /dev/null +++ b/plugins/swap/info.json @@ -0,0 +1,17 @@ +{ + "sort": 7, + "ps": "Linux虚拟内存", + "name": "swap", + "title": "swap", + "shell": "install.sh", + "versions":"1.0", + "tip": "soft", + "checks": "server/swap", + "path": "server/swap", + "display": 1, + "author": "midoks", + "date": "2021-01-29", + "home": "swap", + "type": 0, + "pid": "4" +} \ No newline at end of file diff --git a/plugins/swap/init.d/swap.tpl b/plugins/swap/init.d/swap.tpl new file mode 100644 index 000000000..02e0440c2 --- /dev/null +++ b/plugins/swap/init.d/swap.tpl @@ -0,0 +1,73 @@ +#!/bin/sh +# chkconfig: 2345 55 25 +# description: Redis Service + +### BEGIN INIT INFO +# Provides: Redis +# Required-Start: $all +# Required-Stop: $all +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: starts Redis +# Description: starts the MDW-Web +### END INIT INFO + +# Simple Redis init.d script conceived to work on Linux systems +# as it does use of the /proc filesystem. + +CONF="{$SERVER_PATH}/redis/redis.conf" +REDISPORT=$(cat $CONF |grep port|grep -v '#'|awk '{print $2}') +REDISPASS=$(cat $CONF |grep requirepass|grep -v '#'|awk '{print $2}') +if [ "$REDISPASS" != "" ];then + REDISPASS=" -a $REDISPASS" +fi +EXEC={$SERVER_PATH}/redis/bin/redis-server +CLIEXEC="{$SERVER_PATH}/redis/bin/redis-cli -p $REDISPORT$REDISPASS" +PIDFILE={$SERVER_PATH}/redis/redis_6379.pid + +mkdir -p {$SERVER_PATH}/redis/data + +redis_start(){ + if [ -f $PIDFILE ];then + kill -9 `cat $PIDFILE` + fi + + echo "Starting Redis server..." + nohup $EXEC $CONF >> {$SERVER_PATH}/redis/logs.pl 2>&1 & +} +redis_stop(){ + if [ ! -f $PIDFILE ] + then + echo "$PIDFILE does not exist, process is not running" + else + PID=$(cat $PIDFILE) + echo "Stopping ..." + $CLIEXEC shutdown + while [ -x /proc/${PID} ] + do + echo "Waiting for Redis to shutdown ..." + sleep 1 + done + echo "Redis stopped" + rm -rf $PIDFILE + fi +} + + +case "$1" in + start) + redis_start + ;; + stop) + redis_stop + ;; + restart|reload) + redis_stop + sleep 0.3 + redis_start + ;; + *) + echo "Please use start or stop as first argument" + ;; +esac + diff --git a/plugins/swap/install.sh b/plugins/swap/install.sh new file mode 100755 index 000000000..ec9edaacb --- /dev/null +++ b/plugins/swap/install.sh @@ -0,0 +1,45 @@ +#!/bin/bash +PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin +export PATH + +curPath=`pwd` +rootPath=$(dirname "$curPath") +rootPath=$(dirname "$rootPath") +serverPath=$(dirname "$rootPath") +SYSOS=`uname` + +install_tmp=${rootPath}/tmp/mw_install.pl + +VERSION=$2 + +Install_swap() +{ + echo '正在安装脚本文件...' > $install_tmp + mkdir -p $serverPath/source + mkdir -p $serverPath/swap + echo "${VERSION}" > $serverPath/swap/version.pl + + if [ "$sysName" == "Darwin" ];then + pass + else + dd if=/dev/zero of=/swapfile bs=1M count=1024 + chmod 600 /swapfile + mkswap /swapfile + swapon /swapfile + fi + + echo '安装完成' > $install_tmp +} + +Uninstall_swap() +{ + rm -rf $serverPath/swap + echo "Uninstall_swap" > $install_tmp +} + +action=$1 +if [ "${1}" == 'install' ];then + Install_swap +else + Uninstall_swap +fi