java 宕机监控,宕机监控方法 - Smartbi V6 帮助中心 - Smartbi 在线知识中心

该博客介绍了一个项目需求,即通过一个servlet获取Smartbi服务器的运行状态,包括登录状态、业务库和连接池的健康状况。为解决登录有验证码的问题,创建了一个过滤器(SmartbiCheckLoginFilter)在访问servlet前模拟登录。同时,通过遍历数据源并检查连接池获取业务库和池的正常性。一旦发现异常,系统可及时通知管理员。
摘要由CSDN通过智能技术生成

1 概述

需求:某些项目中,要求Smartbi服务器这边提供一个servlet,请求该servlet会返回一段json字符串,来说明smartbi服务器是否能正常登陆、业务库是否异常、各种池是否正常。其作用是可以使得第三方系统能实时地获取Smartbi服务器的状态,一旦发生宕机,可以做出策略和通知,如发邮件通知管理员等。参考附件中的ServerStatus.java文件。

注意:本示例源码仅作为参考性质。

反馈的状态数据(JSON格式)

{

"success": true,

"returnObject": {

"loginStatus": "能正常登陆",

"dbStatus": "数据库正常",

"DS.SmartbiUnionbase": "数据库正常",

"DS.SYSTEM知识库": "数据库正常"

}

}

2 获取smartbi服务器是否能正常登陆

一般情况下,在该servlet中,直接调用Smartbi的Sdk中的ClientConnector类的open或openFromDB方法就可以;如果Smartbi接入到cas单点登陆平台的话,用CASClientConnector类的 open 方法。

但此项目比较特殊,登录界面有验证码,一般的做法无法模拟成功登录。考虑到验证码是在业务代码里面执行,所以可以通过将调用模拟登录的代码写在业务代码之前即可。最后的做法是,添加一个filter,访问该servlet之前会访问filter;在filter中调用UserManagerModule的loginFromDB方法。将登录的结果放在request对象。参考附件中的SmartbiCheckLoginFilter.java文件。

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import smartbi.framework.rmi.RMIModule;

import smartbi.state.StateModule;

import smartbi.usermanager.UserManagerModule;

public class SmartbiCheckLoginFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

// TODO Auto-generated method stub

//ScheduleTaskModule stm = ScheduleTaskModule.getInstance();

HttpServletRequest req = (HttpServletRequest) request;

if("/ServerStatus".equals(req.getServletPath())

|| "/MobileServerStatus".equals(req.getServletPath())) {

UserManagerModule userManagerModule = UserManagerModule.getInstance();

boolean isOk = false;

isOk = userManagerModule.loginFromDB("xxx", "xxx");

userManagerModule.logout();

req.setAttribute("loginStatus", isOk);

}

chain.doFilter(request, response);

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

3 业务库、各种池是否正常

相当于smartbi服务器能否连接到业务库、各种池。这里的做法是在该servlet中,遍历所有的数据源,然后根据数据源调用Smartbi的连接池类ConnectionPool的getConnection方法即可。参考附件中的ServerStatus.java文件。

private final String checkDataSource(String dsId){

DataSource dbDs = FreeQueryDAOFactory.getDataSourceDAO().load(dsId);

Connection conn = null;

String dbStatus = "数据库正常";

try {

conn = ConnectionPool.getInstance().getConnection(dbDs);

} catch (Exception e) {

System.out.println("ServerStatus监测到异常:"+dsId+e.toString());

logger.debug("ServerStatus监测到异常:"+dsId+e.toString());

dbStatus = "数据库异常";

} finally {

try {

if (conn != null)

conn.close();

if (!dbDs.getUrl().startsWith("JNDI:"))

ConnectionPool.getInstance().closePool(dbDs);

} catch (Throwable e) {

System.out.println("");

}

}

return dbStatus;

}

3 相关资源(EPPR-7022)

下面只是源码文件,需要自己创建扩展包使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值