Skip to content

Commit

Permalink
Merge pull request #619 from midoks/dev
Browse files Browse the repository at this point in the history
update
  • Loading branch information
midoks authored Jul 20, 2024
2 parents 5045af8 + 03a5f75 commit b602ab6
Show file tree
Hide file tree
Showing 8 changed files with 186 additions and 15 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

- 吹水组 - https://t.me/mdserver_web
- 交流论坛 - https://bbs.midoks.icu
- discord - https://discord.gg/3zXk4mES

```
如果出现问题,最好私给我面板信息。不要让我猜。如果不提供,不要提出问题,自行解决。 — 座右铭
Talk is cheap, show me the code. -- linus
Expand Down
2 changes: 1 addition & 1 deletion plugins/zabbix_agent/conf/zabbix_agentd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ LogFileSize=1

ListenIP=0.0.0.0
ListenPort=10050
EnableRemoteCommands=1
#EnableRemoteCommands=1
Timeout=3

Server=127.0.0.1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
# Emulating built-in agent parameter 'system.users.num'
UserParameter=system.test,who | wc -l
#UserParameter=system.test,who | wc -l

# Get size of a directory
# Defaults to /tmp
UserParameter=vfs.dir.size[*],dir="$1"; du -s -B 1 "${dir:-/tmp}" | cut -f1
#UserParameter=vfs.dir.size[*],dir="$1"; du -s -B 1 "${dir:-/tmp}" | cut -f1

# Total CPU utilisation by all processes with a given name.
# Returns empty value if no such processes are present, numeric items will turn unsupported
# Defaults to zabbix_agentd
UserParameter=proc.cpu[*],proc="$1"; ps -o pcpu= -C "${proc:-zabbix_agentd}" | awk '{sum += $$1} END {print sum}'
#UserParameter=proc.cpu[*],proc="$1"; ps -o pcpu= -C "${proc:-zabbix_agentd}" | awk '{sum += $$1} END {print sum}'

# Mail queue length from mailq
UserParameter=unix_mail.queue,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]'
#UserParameter=unix_mail.queue,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]'

# Partition discovery on Linux
UserParameter=vfs.partitions.discovery.linux,for partition in $(awk 'NR > 2 {print $4}' /proc/partitions); do partitionlist="$partitionlist,"'{"{#PARTITION}":"'$partition'"}'; done; echo '{"data":['${partitionlist#,}']}'
#UserParameter=vfs.partitions.discovery.linux,for partition in $(awk 'NR > 2 {print $4}' /proc/partitions); do #partitionlist="$partitionlist,"'{"{#PARTITION}":"'$partition'"}'; done; echo '{"data":['${partitionlist#,}']}'

# Partition discovery on Solaris (using iostat output)
# On Solaris bash usually is not the one linked from /bin/sh, so a wrapper script is suggested
UserParameter=vfs.partitions.discovery.solaris,/somewhere/solaris_partitions.sh
#UserParameter=vfs.partitions.discovery.solaris,/somewhere/solaris_partitions.sh

# Wrapper script (solaris_partitions.sh) contents:
##!/bin/bash
#for partition in $(iostat -x | tail +3 | awk '{print $1}'); do
Expand Down
15 changes: 8 additions & 7 deletions plugins/zabbix_agent/conf/zabbix_agentd/userparameter_mysql.conf
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
#user=zbx_monitor
#password=<password>
#
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"

#UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
#UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
#UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
#UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
#UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
#UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
#UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
1 change: 1 addition & 0 deletions plugins/zabbix_agent/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<p class="bgw" onclick="pluginService('zabbix_agent');">服务</p>
<p onclick="pluginInitD('zabbix_agent');">自启动</p>
<p onclick="pluginConfig('zabbix_agent',$('.plugin_version').attr('version'),'zabbix_agent_conf');">默认配置</p>
<p onclick="zagentDConfigTpl('zabbix_agent',$('.plugin_version').attr('version'),'agentd_default_conf','agentd_conf','agentd_read_conf');">子配置</p>
<p onclick="pluginLogs('zabbix_agent','','run_log');">运行日志</p>
<p onclick="zabbixReadme();">相关说明</p>

Expand Down
43 changes: 43 additions & 0 deletions plugins/zabbix_agent/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,21 @@ def initAgentConf():
content = contentReplace(content)
mw.writeFile(za_dst_path, content)

def initAgentDConf():
clist = ['userparameter_mysql.conf', 'userparameter_examples.conf']
dst_dir = '/etc/zabbix/zabbix_agentd.d'
for c in clist:
za_src_tpl = getPluginDir()+'/conf/zabbix_agentd/'+c
dst_path = dst_dir+'/'+c
if not os.path.exists(dst_path):
content = mw.readFile(za_src_tpl)
mw.writeFile(dst_path,content)

def initDreplace():

init_file = getServerDir() + '/init.pl'
if not os.path.exists(init_file):
initAgentDConf()
initAgentConf()
openPort()
mw.writeFile(init_file, 'ok')
Expand Down Expand Up @@ -190,6 +202,31 @@ def uninstallPreInspection():
return 'ok'


def agentdDefaultConf():
return '/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf'


def agentdConf():
path = '/etc/zabbix/zabbix_agentd.d'
pathFile = os.listdir(path)
tmp = []
for one in pathFile:
file = path + '/' + one
tmp.append(file)
return mw.getJson(tmp)

def agentdReadConf():
args = getArgs()
data = checkArgs(args, ['file'])
if not data[0]:
return data[1]

content = mw.readFile(args['file'])
content = contentReplace(content)
return mw.returnJson(True, 'ok', content)



if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
Expand Down Expand Up @@ -218,5 +255,11 @@ def uninstallPreInspection():
print(zabbixAgentConf())
elif func == 'run_log':
print(runLog())
elif func == 'agentd_default_conf':
print(agentdDefaultConf())
elif func == 'agentd_conf':
print(agentdConf())
elif func == 'agentd_read_conf':
print(agentdReadConf())
else:
print('error')
2 changes: 2 additions & 0 deletions plugins/zabbix_agent/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ export PATH
# cd /www/server/mdserver-web && python3 /www/server/mdserver-web/plugins/zabbix_agent/index.py start


# /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

curPath=`pwd`
rootPath=$(dirname "$curPath")
rootPath=$(dirname "$rootPath")
Expand Down
123 changes: 123 additions & 0 deletions plugins/zabbix_agent/js/zabbix.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,126 @@ function zabbixReadme(){
$('.soft-man-con').html(readme);
}

//配置修改模版 --- start
function zagentDConfigTpl(_name, version, func, config_tpl_func, read_config_tpl_func, save_callback_func){
if ( typeof(version) == 'undefined' ){
version = '';
}

var func_name = 'conf';
if ( typeof(func) != 'undefined' ){
func_name = func;
}

var _config_tpl_func = 'config_tpl';
if ( typeof(config_tpl_func) != 'undefined' ){
_config_tpl_func = config_tpl_func;
}

var _read_config_tpl_func = 'read_config_tpl';
if ( typeof(read_config_tpl_func) != 'undefined' ){
_read_config_tpl_func = read_config_tpl_func;
}


var con = '<p style="color: #666; margin-bottom: 7px">提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!</p>\
<select id="config_tpl" class="bt-input-text mr20" style="width:30%;margin-bottom: 3px;"><option value="0">请选择</option></select>\
<textarea class="bt-input-text" style="height: 320px; line-height:18px;" id="textBody"></textarea>\
<button id="onlineEditFileBtn" class="btn btn-success btn-sm" style="margin-top:10px;">保存</button>\
<ul class="help-info-text c7 ptb15">\
<li>此处为【'+ _name + version +'】主配置文件,若您不了解配置规则,请勿随意修改。</li>\
</ul>';
$(".soft-man-con").html(con);

function getFileName(file){
var list = file.split('/');
var f = list[list.length-1];
return f
}

var fileName = '';
$.post('/plugins/run',{name:_name, func:_config_tpl_func,version:version}, function(data){
var rdata = $.parseJSON(data.data);
for (var i = 0; i < rdata.length; i++) {
$('#config_tpl').append('<option value="'+rdata[i]+'"">'+getFileName(rdata[i])+'</option>');
}

$('#config_tpl').change(function(){
var selected = $(this).val();
if (selected != '0'){
var loadT = layer.msg('配置模版获取中...',{icon:16,time:0,shade: [0.3, '#000']});
fileName = selected;
var _args = JSON.stringify({file:selected});
$.post('/plugins/run', {name:_name, func:_read_config_tpl_func,version:version,args:_args}, function(data){
layer.close(loadT);
var rdata = $.parseJSON(data.data);
if (!rdata.status){
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}

$("#textBody").empty().text(rdata.data);
$(".CodeMirror").remove();
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {
extraKeys: {
"Ctrl-Space": "autocomplete",
"Ctrl-F": "findPersistent",
"Ctrl-H": "replaceAll",
"Ctrl-S": function() {
$("#textBody").text(editor.getValue());
pluginConfigSave(fileName,save_callback_func);
}
},
lineNumbers: true,
matchBrackets:true,
});
editor.focus();
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
$("#onlineEditFileBtn").unbind('click');
$("#onlineEditFileBtn").click(function(){
$("#textBody").text(editor.getValue());
pluginConfigSave(fileName, save_callback_func);
});
},'json');
}
});

},'json');

var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/plugins/run', {name:_name, func:func_name,version:version}, function (data) {
layer.close(loadT);

var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']});
fileName = data.data;
$.post('/files/get_body', 'path=' + fileName, function(rdata) {
layer.close(loadT2);
if (!rdata.status){
layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']});
return;
}
$("#textBody").empty().text(rdata.data.data);
$(".CodeMirror").remove();
var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), {
extraKeys: {
"Ctrl-Space": "autocomplete",
"Ctrl-F": "findPersistent",
"Ctrl-H": "replaceAll",
"Ctrl-S": function() {
$("#textBody").text(editor.getValue());
pluginConfigSave(fileName,save_callback_func);
}
},
lineNumbers: true,
matchBrackets:true,
});
editor.focus();
$(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0});
$("#onlineEditFileBtn").click(function(){
$("#textBody").text(editor.getValue());
pluginConfigSave(fileName,save_callback_func);
});
},'json');
},'json');
}

0 comments on commit b602ab6

Please sign in to comment.