/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.snail.main;
import com.snail.beans.CmdResult;
import com.snail.beans.RequestResult;
import com.snail.utils.HTMLDecoder;
import com.snail.cfg.XConfig;
import com.snail.cfg.XLogger;
import com.woniu.utils.datetime.DateTime;
import com.woniu.utils.io.file.TextWriter;
import com.woniu.utils.net.http.HttpGetForm;
import com.woniu.utils.net.http.HttpGetPostResponse;
import com.woniu.utils.net.http.HttpPostForm;
import com.woniu.utils.net.http.HttpToolkit;
import it.sauronsoftware.cron4j.Scheduler;
import it.sauronsoftware.cron4j.Task;
import it.sauronsoftware.cron4j.TaskExecutionContext;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.TimeZone;
import java.util.regex.Pattern;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.SimpleEmail;
import org.apache.http.HttpResponse;
import org.jsoup.nodes.Element;
/**
*
* @author pm
*/
public abstract class XTask extends Task {
private int error_count = 0, skipped_count = -1, warned_count = 0;
protected Element full_cfg;
protected Element cfg, module;
protected Scheduler scheduler;
protected String taskId;
private boolean hasError = false;
long hasErrorTime = 0;
public XTask(Element full_cfg, Element cfg, Element module) {
this.cfg = cfg;
this.module = module;
this.full_cfg = full_cfg;
}
public void setTaskId(String taskId, Scheduler scheduler) {
this.taskId = taskId;
this.scheduler = scheduler;
}
public void stop() {
if (scheduler != null) {
scheduler.deschedule(taskId);
}
}
public abstract void onExecute(TaskExecutionContext tec);
@Override
public void execute(TaskExecutionContext tec) throws RuntimeException {
try {
onExecute(tec);
} catch (Exception e) {
XLogger.logger.error("thread execute exception : ", e);
}
}
public static CmdResult runCommand(Element command_cfg) {
CmdResult result = new CmdResult();
if (command_cfg == null) {
return result;
}
Element cmd = command_cfg;
if (!getText(cmd).isEmpty()) {
int cmd_timeout = Integer.parseInt(cmd.attr("timeout"));
result = exec(getText(cmd), cmd_timeout);
if (!result.isSuccess()) {
XLogger.logger.warn("exec fail : " + getText(cmd) + " " + result.getOutput());
}
return result;
}
return result;
}
protected static CmdResult exec(String command, int timeout) {
CmdResult result = new CmdResult();
//执行串行命令
String randomName = System.getProperty("java.io.tmpdir") + "/commander_" + String.valueOf(Math.random()).substring(2) + ".sh";
String content = "#!/bin/bash\n" + command;
XLogger.logger.trace("try to create tmp file : " + randomName + " of command : " + command);
TextWriter writer = new TextWriter("UTF-8").setOutputFile(randomName);
if (writer != null) {
writer.write(content);
writer.close();
XLogger.logger.trace("create tmp file success : " + randomName);
File file;
if ((file = new File(randomName)).isFile()) {
//执行单个命令
result = execCmd(("/bin/bash " + randomName), timeout);
file.delete();
XLogger.logger.trace("delete tmp file : " + randomName);
return result;
} else {
XLogger.logger.error(" write file fail:" + "[" + randomName + "]", true);
}
} else {
XLogger.logger.error(" write file fail:" + "[" + randomName + "]", true);
}
return result;
}
private static CmdResult execCmd(String commandstr, int timeout) {
String[] commands = commandstr.split(" ");
CmdResult result = new CmdResult();
try {
XLogger.logger.trace("exec : " + commandstr);
Process p = Runtime.getRuntime().exec(commands);
int execTimeout = timeout;
TimeoutManager.addExec(p, execTimeout > 0 ? TimeoutManager.getTime() + execTimeout : 0);
String output = "", error_output = "";
try {
output = getStreamOutput(p.getInputStream());
error_output = getStreamOutput(p.getErrorStream());
XLogger.logger.trace("exec done : " + commandstr);
} catch (IOException e) {
XLogger.logger.warn("exec io error : " + commandstr, e);
}
if (TimeoutManager.getExecTiemout(p) == -1) {
XLogger.logger.warn(" exec timeout : " + commandstr);
TimeoutManager.removeExecTiemout(p);
return result;
}
TimeoutManager.removeExecTiemout(p);
if (!error_output.isEmpty()) {
result.setSuccess(false);
result.setOutput(error_output);
return result;
} else {
result.setSuccess(true);
result.setOutput(output);
return result;
}
} catch (IOException ex) {
XLogger.logger.warn("exec " + commandstr, ex);
result.setSuccess(false);
result.setOutput(ex.getMessage());
return result;
}
}
private static String getStreamOutput(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line, output;
StringBuilder sbLines = new StringBuilder();
while ((line = br.readLine()) != null) {
sbLines.append(line).append("\n");
}
output = sbLines.toString();
is.close();
br.close();
return output;
}
public static RequestResult httpRequest(Element req_cfg, String status_code, String output, long keepSeconds) {
if (req_cfg == null) {
return new RequestResult().setHasError(false);
}
String req_method = req_cfg.attr("method");
String req_url = req_cfg.attr("url");
if (req_url != null && !req_url.isEmpty()) {
XLogger.logger.trace("request to :" + req_url);
HttpGetPostResponse response;
String code = req_cfg.attr("code");
if ("get".equalsIgnoreCase(req_method)) {
HttpGetForm form = new HttpGetForm();
if (req_cfg.select(">form>item").size() > 0) {
for (Element item : req_cfg.select(">form>item")) {
form.add(item.attr("name"), getText(item));
}
}
if (XConfig.cfg().select(">global>request[method=get]>form>item").size() > 0) {
for (Element item : XConfig.cfg().select(">global>request[method=get]>form>item")) {
form.add(item.attr("name"), getText(item));
}
}
if (req_url.startsWith("https://")) {
response = https().doGet(req_url, form);
} else {
response = http().doGet(req_url, form);
}
} else {
HttpPostForm form = new HttpPostForm();
if (req_cfg.select(">form>item").size() > 0) {
for (Element item : req_cfg.select(">form>item")) {
form.add(item.attr("name"), parseContent(getText(item), status_code, output, keepSeconds));
没有合适的资源?快使用搜索试试~ 我知道了~
开源的Linux服务器监控,数据采集,Linux服务器运维的有力助手
共49个文件
jar:17个
java:14个
xml:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 121 浏览量
2023-08-07
15:51:44
上传
评论
收藏 6.39MB ZIP 举报
温馨提示
开源的Linux服务器监控,数据采集,Linux服务器运维的有力助手。支持:http监控,进程监控,MySQL监控,TCP监控,PING监控,命令结果监控。灵活使用会有意想不到的效果。
资源推荐
资源详情
资源评论
收起资源包目录
xmonitor-client-master.zip (49个子文件)
xmonitor-client-master
lib
woniuUtils.jar 86KB
httpclient-cache-4.2.2.jar 113KB
logback-core-1.0.9.jar 358KB
httpclient-4.2.2.jar 418KB
slf4j-api-1.7.2.jar 25KB
commons-codec-1.6.jar 227KB
mysql-connector-java-5.1.22-bin.jar 813KB
cron4j-2.2.5.jar 35KB
commons-email-1.3.jar 48KB
logback-access-1.0.9.jar 88KB
fluent-hc-4.2.2.jar 21KB
logback-classic-1.0.9.jar 247KB
commons-logging-1.1.1.jar 59KB
httpcore-4.2.2.jar 218KB
jsoup-1.7.1.jar 272KB
mail-1.4.1.jar 437KB
httpmime-4.2.2.jar 26KB
nbproject
project.properties 4KB
genfiles.properties 467B
build-impl.xml 76KB
project.xml 593B
src
com
snail
task
ProcessTask.java 3KB
HttpTask.java 3KB
MySQLTask.java 1KB
TCPTask.java 1KB
CommandTask.java 1KB
PingTask.java 2KB
utils
HTMLDecoder.java 21KB
beans
CmdResult.java 1KB
RequestResult.java 1KB
cfg
XLogger.java 959B
XConfig.java 1KB
main
TimeoutManager.java 2KB
XTask.java 22KB
Xmonitor.java 4KB
manifest.mf 82B
LICENSE 1KB
xmonitor-client_1.0.2.tar.gz 3.13MB
config_structure.png 41KB
bin
plugins
net_traffic.sh 709B
xmointor.sh 1KB
.gitignore 40B
dist.sh 196B
build.xml 4KB
log
xlogs-debug.log 0B
xlogs.log 360KB
CHANGELOG 1KB
config
client.xml 11KB
logback-log.xml 2KB
共 49 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6649
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功