查看: 3188|回复: 6

[精华] 通过JAVA代理查询Domino服务器用户在线人数

[复制链接]
论坛徽章:
1
IBM软件技术精英协会成员
日期:2006-12-27 18:43:27
发表于 2006-12-31 21:01 | 显示全部楼层 |阅读模式
import lotus.domino.*;
import java.io.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;

public class JavaAgent
    extends AgentBase {

  private static final String CONSOLE_COMMAND =
      "Show Inetusers -xml >HttpUsers.xml";
  private static final String OUTPUT_FILE_NAME = "HttpUsers.xml";

  public void NotesMain() {

    try {
      Session session = getSession();

      //取Domino服务器版本,版本低于6.5则退出
      String dominoVersion = session.getNotesVersion();
      if (dominoVersion.indexOf("6.5" < 0) {
        return;
      }

      AgentContext agentContext = session.getAgentContext();
      Database curDB = agentContext.getCurrentDatabase();
      String server = curDB.getServer();

      // (Your code goes here)
      //接收控制台返回的字符串
      String returnString = session.sendConsoleCommand(server, CONSOLE_COMMAND);
      if (returnString.equals("" || returnString.indexOf("<" < 0 ||
          returnString.indexOf(">" < 0) {
        return;
      }

      //输出的文件存在则先删除
      File file = new File(OUTPUT_FILE_NAME);
      if (file.exists()) {
        file.delete();
      }

      //将控制台返回的字符串写到文件中
      FileOutputStream fos = new FileOutputStream(file);
      fos.write(returnString.getBytes());
      fos.flush();
      fos.close();

      //分析XML文件
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.
          newInstance();
      DocumentBuilder builder = builderFactory.newDocumentBuilder();
      org.w3c.dom.Document document = builder.parse(file);
      Element rootElement = document.getDocumentElement();

      NodeList userDataList = rootElement.getElementsByTagName("userdata";
      if (userDataList == null || userDataList.getLength() == 0) {
        return;
      }

      Node userDataNode = null;
      Node userNameNode = null;
      for (int i = 0; i < userDataList.getLength(); i++) {
        userDataNode = userDataList.item(i);
        String netaddress = getNodeProperty(userDataNode, "netaddress";
        String login = getNodeProperty(userDataNode, "login";
        login = stringToDateTimeString(login);

        String expires = getNodeProperty(userDataNode, "expires";
        expires = stringToDateTimeString(expires);

        userNameNode = userDataNode.getChildNodes().item(1);
        if (userNameNode == null) {
          continue;
        }
        if (!userNameNode.hasChildNodes()) {
          continue;
        }

        String userName = getNodeValue(userNameNode);
        String printString = "用户名=" + userName + ", 地址=" + netaddress +
            ", 登陆时间=" + login + ", 过期时间=" + expires;
        System.out.println(printString);
      }

    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public String getNodeValue(Node node) {
    Node firstNode = node.getFirstChild();
    if (firstNode == null) {
      return "";
    }

    return firstNode.getNodeValue();
  }

  public String getNodeProperty(Node node, String propertyName) {
    NamedNodeMap namedNodeMap = node.getAttributes();
    if (namedNodeMap == null || namedNodeMap.getLength() == 0) {
      return "";
    }

    for (int i = 0; i < namedNodeMap.getLength(); i++) {
      Node childNode = namedNodeMap.item(i);
      if (childNode.getNodeName().equals(propertyName)) {
        return childNode.getNodeValue();
      }
    }

    return "";
  }

  public String stringToDateTimeString(String string) {
    int pos = string.indexOf("T";
    String single = string.substring(0, 4);
    single += "年";
    single += string.substring(4, 6);
    single += "月";
    single += string.substring(6, 8);
    single += " ";

    String sHour = string.substring(pos + 1, pos + 3);
    String sMinute = string.substring(pos + 3, pos + 5);
    String sSecond = string.substring(pos + 5, pos + 7);

    single += sHour + ":" + sMinute + ":" + sSecond;
    int hour = Integer.parseInt(sHour);

    if (hour < 12) {
      single += " 早上";
    }
    else {
      single += " 下午";
    }

    return single;
  }
}
论坛徽章:
1
IBM软件技术精英协会成员
日期:2007-01-24 14:56:37
发表于 2007-1-4 18:02 | 显示全部楼层
记住这个命令就可以了

Show Inetusers -xml >HttpUsers.xml

LZ辛苦

使用道具 举报

回复
论坛徽章:
1
IBM软件技术精英协会成员
日期:2006-12-27 18:43:27
 楼主| 发表于 2007-1-4 21:00 | 显示全部楼层
在编译这个JAVA代理时,需要引入xml-apis.jar包

使用道具 举报

回复
论坛徽章:
1
ERP板块每日发贴之星
日期:2006-10-08 01:02:30
发表于 2007-1-10 13:08 | 显示全部楼层
必须从控制台捕捉吗,不知道是否可以直接从Notes的其他文件中或是进程中获取。

使用道具 举报

回复
论坛徽章:
1
IBM软件技术精英协会成员
日期:2006-12-27 18:43:27
 楼主| 发表于 2007-1-10 20:21 | 显示全部楼层
从NOTES客户端是无法获取的,只能从DOMINO控制台进行捕捉。除非你安装SM即时通讯

使用道具 举报

回复
论坛徽章:
1
IBM软件技术精英协会成员
日期:2006-12-27 18:43:27
发表于 2007-2-7 14:26 | 显示全部楼层
谢谢,很有用的贴子!

使用道具 举报

回复
论坛徽章:
16
2011新春纪念徽章
日期:2011-01-25 15:41:01马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58
发表于 2007-3-20 14:39 | 显示全部楼层
楼主,太有才了!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表