Search in sources :

Example 1 with ProgramCallDocument

use of com.ibm.as400.data.ProgramCallDocument in project nagios-for-i by IBM.

the class SpecificMessage method execute.

public int execute(AS400 as400, Map<String, String> args, StringBuffer response) {
    int version = 0;
    int release = 0;
    try {
        version = as400.getVersion();
        release = as400.getRelease();
    } catch (Exception eVR) {
        response.append(Constants.retrieveDataException + " - " + eVR.getMessage());
        return Constants.UNKNOWN;
    }
    Integer returnValue = Constants.UNKNOWN;
    Date date = null;
    Time time = null;
    String msgText = null;
    int severity = 0;
    String user = null;
    Set<String> msgSet = new HashSet<String>();
    Statement stmt = null;
    ResultSet rs = null;
    String sqlType = null;
    String regEx = null;
    int count = 0;
    String messageID = args.get("-I");
    if (messageID == null) {
        response.append("The argument -I [message ID] is not set");
        return returnValue;
    }
    if (messageID.indexOf("*") != -1) {
        sqlType = "like";
        regEx = messageID;
        messageID = messageID.replace("*", "%");
    } else {
        sqlType = "in";
        String[] splitTemp = messageID.split(",");
        int msgNum = splitTemp.length;
        messageID = "";
        for (int i = 0; i < msgNum; i++) {
            messageID += "'" + splitTemp[i] + "'";
            if (i != msgNum - 1) {
                messageID += ",";
            }
        }
    }
    if (version > 7 || (version == 7 && release > 1)) {
        // system version is priority to v7r1, run the plugin by SQL service
        Connection connection = null;
        try {
            JDBCConnection JDBCConn = new JDBCConnection();
            connection = JDBCConn.getJDBCConnection(as400.getSystemName(), args.get("-U"), args.get("-P"), args.get("-SSL"));
            if (connection == null) {
                response.append(Constants.retrieveDataError + " - " + "Cannot get the JDBC connection");
                return returnValue;
            }
            stmt = connection.createStatement();
            if (sqlType.equalsIgnoreCase("like")) {
                rs = stmt.executeQuery("SELECT MESSAGE_ID, FROM_USER, MESSAGE_TEXT, SEVERITY, MESSAGE_TIMESTAMP FROM QSYS2.MESSAGE_QUEUE_INFO WHERE MESSAGE_ID LIKE '" + messageID.toUpperCase() + "'");
            } else if (sqlType.equalsIgnoreCase("in")) {
                rs = stmt.executeQuery("SELECT MESSAGE_ID, FROM_USER, MESSAGE_TEXT, SEVERITY, MESSAGE_TIMESTAMP FROM QSYS2.MESSAGE_QUEUE_INFO WHERE MESSAGE_ID IN (" + messageID.toUpperCase() + ")");
            }
            if (rs == null) {
                response.append(Constants.retrieveDataError + " - " + "Cannot retrieve data from server");
                return returnValue;
            }
            while (rs.next()) {
                user = rs.getString("FROM_USER");
                severity = rs.getInt("SEVERITY");
                date = rs.getDate("MESSAGE_TIMESTAMP");
                time = rs.getTime("MESSAGE_TIMESTAMP");
                messageID = rs.getString("MESSAGE_ID");
                msgText = rs.getString("MESSAGE_TEXT");
                msgSet.add(messageID);
                count++;
                returnValue = Constants.WARN;
                response.append("Message ID: " + messageID + " User: " + user + " Severity: " + severity + " Date: " + date + " Time: " + time + " Text: " + msgText + "\n");
            }
            if (count == 0) {
                returnValue = Constants.OK;
                response.append("Status: OK");
            } else {
                response.insert(0, "Message counts: " + count + "\n");
            }
        } catch (Exception e) {
            response.setLength(0);
            response.append(Constants.retrieveDataException + " - " + e.toString());
            CommonUtil.printStack(e.getStackTrace(), response);
            CommonUtil.logError(args.get("-H"), this.getClass().getName(), e.getMessage());
            e.printStackTrace();
        } finally {
            date = null;
            time = null;
            try {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (connection != null)
                    connection.close();
            } catch (SQLException e) {
                response.append(Constants.retrieveDataException + " - " + e.toString());
                e.printStackTrace();
            }
        }
    } else {
        // system version is v7r1 or below, run the plugin by API
        ProgramCallDocument pcml = null;
        boolean rc = false;
        String msgID = null;
        String strTime = null;
        String strDate = null;
        String m_parameter;
        try {
            pcml = new ProgramCallDocument(as400, "com.ibm.nagios.util.qgyolmsg");
            int[] fieldIndex = new int[1];
            // Set selection criteria value
            m_parameter = "qgyolmsg.msgSelInfo.selectionCriteria";
            fieldIndex[0] = 0;
            pcml.setValue(m_parameter, fieldIndex, "*ALL      ");
            // Set message queue information for the list
            m_parameter = "qgyolmsg.userOrQueueInfo.userOrQueueIndicator";
            pcml.setValue(m_parameter, "1");
            m_parameter = "qgyolmsg.userOrQueueInfo.userOrQueueName";
            pcml.setValue(m_parameter, "QSYSOPR   QSYS      ");
            // Set starting message key
            m_parameter = "qgyolmsg.msgSelInfo.messageKeys";
            fieldIndex[0] = 0;
            pcml.setValue(m_parameter, fieldIndex, 0);
            fieldIndex[0] = 1;
            pcml.setValue(m_parameter, fieldIndex, 65535);
            // Set fields to return
            int[] keyIndex;
            int keyValue;
            keyIndex = new int[1];
            m_parameter = "qgyolmsg.msgSelInfo.fldsToReturn";
            keyIndex[0] = 0;
            // Message
            keyValue = 301;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            keyIndex[0] = 1;
            // User profile
            keyValue = 607;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            keyIndex[0] = 2;
            // Reply status
            keyValue = 1001;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            rc = pcml.callProgram("qgyolmsg");
            if (rc == false) {
                // Print out all of the AS/400 messages
                AS400Message[] messageList = pcml.getMessageList("qgyolmsg");
                for (int i = 0; i < messageList.length; i++) {
                    response.append(Constants.retrieveDataException + " - " + messageList[i].getID() + "  " + messageList[i].getText());
                }
                return Constants.UNKNOWN;
            }
            // Get number messages returned
            m_parameter = "qgyolmsg.listInfo.rcdsReturned";
            int nbrEntries = pcml.getIntValue(m_parameter);
            int[] index = new int[1];
            fieldIndex = new int[2];
            for (int i = 0; i < nbrEntries; i++) {
                index[0] = i;
                // Retrieve message ID
                msgID = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.msgID", index).trim();
                // Retrieve message type
                // type = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.msgType", index).trim();
                // Retrieve sent time
                strTime = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.timeSent", index);
                // Retrieve sent date
                strDate = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.dateSent", index).substring(1);
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmss");
                Date dateTime = dateFormat.parse(strDate + strTime);
                // Retrieve filed number
                int nbrKeyFields = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.nbrOfFields", index);
                for (int j = 0; j < nbrKeyFields; j++) {
                    fieldIndex[0] = i;
                    fieldIndex[1] = j;
                    // Retrieve key field data
                    byte[] keyData = (byte[]) pcml.getValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.keyData", fieldIndex);
                    // Retrieve field key
                    int dataKey = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.keyField", fieldIndex);
                    // Retrieve data length
                    int dataLength = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.lengthOfData", fieldIndex);
                    switch(dataKey) {
                        case 301:
                            // Set the message: Char(*)
                            if (dataLength > 0) {
                                AS400Text text = new AS400Text(dataLength, as400.getCcsid(), as400);
                                msgText = (String) text.toObject(keyData, 0);
                                text = null;
                            }
                            break;
                        case 607:
                            // Set the user profile: Char(*)
                            if (dataLength > 0) {
                                AS400Text text = new AS400Text(dataLength, as400.getCcsid(), as400);
                                user = (String) text.toObject(keyData, 0);
                                text = null;
                            }
                            break;
                    }
                }
                if (sqlType.equalsIgnoreCase("in") && messageID.contains(msgID)) {
                    response.append("Message ID: " + msgID + " User: " + user + " Severity: " + severity + " Time: " + dateTime + " Text: " + msgText + "\n");
                    msgSet.add(msgID);
                    count++;
                    returnValue = Constants.WARN;
                } else if (sqlType.equalsIgnoreCase("like")) {
                    if (Pattern.compile(regEx).matcher(msgID).find()) {
                        response.append("Message ID: " + msgID + " User: " + user + " Severity: " + severity + " Time: " + dateTime + " Text: " + msgText + "\n");
                        msgSet.add(msgID);
                        count++;
                        returnValue = Constants.WARN;
                    }
                }
            }
            if (count == 0) {
                returnValue = Constants.OK;
                response.append("Status: OK");
            } else {
                response.insert(0, "Message counts: " + count + "\n");
            }
            m_parameter = "qgyolmsg.listInfo.rqsHandle";
            Object handle = pcml.getValue(m_parameter);
            m_parameter = "qgyclst.closeHand";
            pcml.setValue(m_parameter, handle);
            m_parameter = "qgyclst";
            pcml.callProgram("qgyclst");
        } catch (Exception e) {
            response.setLength(0);
            response.append(Constants.retrieveDataException + " - " + e.toString());
        }
    }
    return returnValue;
}
Also used : SQLException(java.sql.SQLException) Statement(java.sql.Statement) Connection(java.sql.Connection) JDBCConnection(com.ibm.nagios.util.JDBCConnection) Time(java.sql.Time) SQLException(java.sql.SQLException) Date(java.util.Date) ProgramCallDocument(com.ibm.as400.data.ProgramCallDocument) AS400Text(com.ibm.as400.access.AS400Text) ResultSet(java.sql.ResultSet) AS400Message(com.ibm.as400.access.AS400Message) SimpleDateFormat(java.text.SimpleDateFormat) JDBCConnection(com.ibm.nagios.util.JDBCConnection) HashSet(java.util.HashSet)

Example 2 with ProgramCallDocument

use of com.ibm.as400.data.ProgramCallDocument in project nagios-for-i by IBM.

the class Message method execute.

public int execute(AS400 as400, Map<String, String> args, StringBuffer response) {
    int version = 0;
    int release = 0;
    try {
        version = as400.getVersion();
        release = as400.getRelease();
    } catch (Exception eVR) {
        response.append(Constants.retrieveDataException + " - " + eVR.getMessage());
        return Constants.UNKNOWN;
    }
    int messageNum = 0;
    int severity = 0;
    String type = null;
    String msgText = null;
    String msgID = null;
    String user = null;
    Date date = null;
    Time time = null;
    Statement stmt = null;
    ResultSet rs = null;
    String msgQueLib = args.get("-LIB");
    msgQueLib = msgQueLib == null ? "QSYS" : msgQueLib.trim().toUpperCase();
    String msgQueName = args.get("-NAME");
    msgQueName = msgQueName == null ? "QSYSOPR" : msgQueName.trim().toUpperCase();
    String msgType = args.get("-TY");
    msgType = msgType == null ? "INQUIRY, ESCAPE, REPLY" : msgType.trim().toUpperCase();
    String[] types = msgType.split(",");
    String requireType = "";
    for (int i = 0; i < types.length; i++) {
        requireType = requireType + "'" + types[i].trim() + "'";
        if (i != types.length - 1)
            requireType += ",";
    }
    Integer returnValue = Constants.UNKNOWN;
    String warningCap = args.get("-W");
    String criticalCap = args.get("-C");
    int intWarningCap = (warningCap == null) ? 100 : Integer.parseInt(warningCap);
    int intCriticalCap = (criticalCap == null) ? 100 : Integer.parseInt(criticalCap);
    if (version > 7 || (version == 7 && release > 1)) {
        // system version is priority to v7r1, run the plugin by SQL service
        Connection connection = null;
        try {
            JDBCConnection JDBCConn = new JDBCConnection();
            connection = JDBCConn.getJDBCConnection(as400.getSystemName(), args.get("-U"), args.get("-P"), args.get("-SSL"));
            if (connection == null) {
                response.append(Constants.retrieveDataError + " - " + "Cannot get the JDBC connection");
                return returnValue;
            }
            stmt = connection.createStatement();
            rs = stmt.executeQuery("SELECT MESSAGE_ID, FROM_USER, MESSAGE_TYPE, MESSAGE_TEXT, SEVERITY, MESSAGE_TIMESTAMP FROM QSYS2.MESSAGE_QUEUE_INFO WHERE MESSAGE_QUEUE_LIBRARY = '" + msgQueLib.trim() + "' AND MESSAGE_QUEUE_NAME = '" + msgQueName.trim() + "' AND MESSAGE_TYPE IN (" + requireType + ")");
            if (rs == null) {
                response.append(Constants.retrieveDataError + " - " + "Cannot retrieve data from server");
                return returnValue;
            }
            while (rs.next()) {
                msgID = rs.getString("MESSAGE_ID");
                user = rs.getString("FROM_USER");
                type = rs.getString("MESSAGE_TYPE");
                msgText = rs.getString("MESSAGE_TEXT");
                date = rs.getDate("MESSAGE_TIMESTAMP");
                time = rs.getTime("MESSAGE_TIMESTAMP");
                severity = rs.getInt("SEVERITY");
                response.append("ID: " + msgID + " Text: " + msgText + "\n");
                response.append("User: " + user + " Type: " + type + " Severity: " + severity + " Date Sent: " + date + " Time Sent: " + time + "\n");
                messageNum++;
            }
            returnValue = CommonUtil.getStatus(messageNum, intWarningCap, intCriticalCap, returnValue);
            response.insert(0, "Message Num in type " + requireType + ": " + messageNum + "\n");
        } catch (Exception e) {
            response.setLength(0);
            response.append(Constants.retrieveDataException + " - " + e.toString());
            CommonUtil.printStack(e.getStackTrace(), response);
            CommonUtil.logError(args.get("-H"), this.getClass().getName(), e.getMessage());
            e.printStackTrace();
        } finally {
            date = null;
            time = null;
            types = null;
            try {
                if (rs != null)
                    rs.close();
                if (stmt != null)
                    stmt.close();
                if (connection != null)
                    connection.close();
            } catch (SQLException e) {
                response.append(Constants.retrieveDataException + " - " + e.toString());
            }
        }
    } else {
        // system version is v7r1 or below, run the plugin by API
        ProgramCallDocument pcml = null;
        boolean rc = false;
        String strTime = null;
        String strDate = null;
        String m_parameter;
        try {
            pcml = new ProgramCallDocument(as400, "com.ibm.nagios.util.qgyolmsg");
            int[] fieldIndex = new int[1];
            // Set selection criteria value
            m_parameter = "qgyolmsg.msgSelInfo.selectionCriteria";
            fieldIndex[0] = 0;
            pcml.setValue(m_parameter, fieldIndex, "*ALL      ");
            // Set message queue information for the list
            m_parameter = "qgyolmsg.userOrQueueInfo.userOrQueueIndicator";
            pcml.setValue(m_parameter, "1");
            m_parameter = "qgyolmsg.userOrQueueInfo.userOrQueueName";
            msgQueName += BLANK10.substring(msgQueName.length());
            msgQueLib += BLANK10.substring(msgQueLib.length());
            pcml.setValue(m_parameter, msgQueName + msgQueLib);
            // Set starting message key
            m_parameter = "qgyolmsg.msgSelInfo.messageKeys";
            fieldIndex[0] = 0;
            pcml.setValue(m_parameter, fieldIndex, 0);
            fieldIndex[0] = 1;
            pcml.setValue(m_parameter, fieldIndex, 65535);
            // Set fields to return
            int[] keyIndex;
            int keyValue;
            keyIndex = new int[1];
            m_parameter = "qgyolmsg.msgSelInfo.fldsToReturn";
            keyIndex[0] = 0;
            // Message
            keyValue = 301;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            keyIndex[0] = 1;
            // User profile
            keyValue = 607;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            keyIndex[0] = 2;
            // Reply status
            keyValue = 1001;
            pcml.setIntValue(m_parameter, keyIndex, keyValue);
            rc = pcml.callProgram("qgyolmsg");
            if (rc == false) {
                // Print out all of the AS/400 messages
                AS400Message[] messageList = pcml.getMessageList("qgyolmsg");
                for (int i = 0; i < messageList.length; i++) {
                    response.append(Constants.retrieveDataException + " - " + messageList[i].getID() + "  " + messageList[i].getText());
                }
                return Constants.UNKNOWN;
            }
            // Get number messages returned
            m_parameter = "qgyolmsg.listInfo.rcdsReturned";
            int nbrEntries = pcml.getIntValue(m_parameter);
            int[] index = new int[1];
            fieldIndex = new int[2];
            for (int i = 0; i < nbrEntries; i++) {
                index[0] = i;
                // Retrieve message ID
                msgID = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.msgID", index).trim();
                // Retrieve message type
                type = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.msgType", index).trim();
                // Retrieve sent time
                strTime = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.timeSent", index);
                // Retrieve sent date
                strDate = pcml.getStringValue("qgyolmsg.lstm0100.msgEntry.dateSent", index).substring(1);
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMddHHmmss");
                Date dateTime = dateFormat.parse(strDate + strTime);
                // Retrieve filed number
                int nbrKeyFields = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.nbrOfFields", index);
                for (int j = 0; j < nbrKeyFields; j++) {
                    fieldIndex[0] = i;
                    fieldIndex[1] = j;
                    // Retrieve key field data
                    byte[] keyData = (byte[]) pcml.getValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.keyData", fieldIndex);
                    // Retrieve field key
                    int dataKey = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.keyField", fieldIndex);
                    // Retrieve data length
                    int dataLength = pcml.getIntValue("qgyolmsg.lstm0100.msgEntry.fieldInfo.lengthOfData", fieldIndex);
                    switch(dataKey) {
                        case 301:
                            // Set the message: Char(*)
                            if (dataLength > 0) {
                                AS400Text text = new AS400Text(dataLength, as400.getCcsid(), as400);
                                msgText = (String) text.toObject(keyData, 0);
                                text = null;
                            }
                            break;
                        case 607:
                            // Set the user profile: Char(*)
                            if (dataLength > 0) {
                                AS400Text text = new AS400Text(dataLength, as400.getCcsid(), as400);
                                user = (String) text.toObject(keyData, 0);
                                text = null;
                            }
                            break;
                    }
                }
                type = MESSAGE_TYPE[Integer.parseInt(type)];
                if (msgType.contains(type)) {
                    response.append("ID: " + msgID + " Text: " + msgText + "\n");
                    response.append("User: " + user + " Type: " + type + " Severity: " + severity + " Time Sent: " + dateTime + "\n");
                    messageNum++;
                }
            }
            returnValue = CommonUtil.getStatus(messageNum, intWarningCap, intCriticalCap, returnValue);
            response.insert(0, "Message Num in type " + requireType + ": " + messageNum + "\n");
            m_parameter = "qgyolmsg.listInfo.rqsHandle";
            Object handle = pcml.getValue(m_parameter);
            m_parameter = "qgyclst.closeHand";
            pcml.setValue(m_parameter, handle);
            m_parameter = "qgyclst";
            pcml.callProgram("qgyclst");
        } catch (Exception e) {
            response.setLength(0);
            response.append(Constants.retrieveDataException + " - " + e.toString());
            e.printStackTrace();
        }
    }
    return returnValue;
}
Also used : SQLException(java.sql.SQLException) Statement(java.sql.Statement) Connection(java.sql.Connection) JDBCConnection(com.ibm.nagios.util.JDBCConnection) Time(java.sql.Time) SQLException(java.sql.SQLException) Date(java.util.Date) ProgramCallDocument(com.ibm.as400.data.ProgramCallDocument) AS400Text(com.ibm.as400.access.AS400Text) ResultSet(java.sql.ResultSet) AS400Message(com.ibm.as400.access.AS400Message) SimpleDateFormat(java.text.SimpleDateFormat) JDBCConnection(com.ibm.nagios.util.JDBCConnection)

Aggregations

AS400Message (com.ibm.as400.access.AS400Message)2 AS400Text (com.ibm.as400.access.AS400Text)2 ProgramCallDocument (com.ibm.as400.data.ProgramCallDocument)2 JDBCConnection (com.ibm.nagios.util.JDBCConnection)2 Connection (java.sql.Connection)2 ResultSet (java.sql.ResultSet)2 SQLException (java.sql.SQLException)2 Statement (java.sql.Statement)2 Time (java.sql.Time)2 SimpleDateFormat (java.text.SimpleDateFormat)2 Date (java.util.Date)2 HashSet (java.util.HashSet)1