AXP(Application eXtension Platform)/SysInfo API

バージョン 2

    AXP(Application eXtension Platform)へ戻る

     

    AXP SysInfo APIを利用することで、AXPOSまたはAXPUDLからルータの情報を Java,C/C++,Perl,Pythonのプログラムより取得することができます。

     

    依存ファイル

    SysInfo APIを使うためには、axpsystemapi を依存関係として指定する必要があります。

    Name: axpsystemapi (1.5.3)
    Desc: AXP standard services(AXP SysInfo, SysOp, CLI API)
       id: 53bf57bd-d7bf-4f4a-977d-6f90fb2e74e3
    Type: (application)

     

     

    Pythonの場合

     

    1. SystemInfoExample.py を作成します。
      #!/usr/bin/env python
      #
      # ---------------------------------------------------------------------
      # Get Swap Space Info and Router IP Address
      # ---------------------------------------------------------------------
      import __builtin__
      import sys
      sys.path.append('/usr/lib/python2.4/serviceapi')
      sys.path.append('/usr/lib/python2.4/serviceapi/axpsystemapi/')
      import AxpSystemAPI
      import SysInfoRequest
      import SysInfoResponse
      import SysOpRequest
      import SysOpResponse
      import ParamList
      import ParamListList
      #------------------------------------------
      # Get Swap Space Info
      #------------------------------------------
      sysInfo = AxpSystemAPI.getSysInfoRequest()

       

      sysInfo.setReqName("swapStatistics")
      resp = sysInfo.execute()
      listlist = resp.getParamListList()
      list = listlist.getParamListKey(None)
      print "swapFree is " + list.getParamValue("swapFree")
      print "swapTotal is " + list.getParamValue("swapTotal")
      print "swapUsed is " + list.getParamValue("swapUsed")

       

      #------------------------------------------
      # Get Router IP address
      #------------------------------------------
      sysInfo.setReqName("routerInfo");
      resp = sysInfo.execute()
      listlist = resp.getParamListList()
      list = listlist.getParamListKey(None)
      print "IP Address is " + list.getParamValue("ipAddress")

    2. SystemInfoExample.py をパッケージに含めてAXPにインストールします。(rsync,scpなどでコピーしてもよいです)
      ※pythonをRPMでインストールすることを忘れないでください。
    3. 実行します。
      bash-3.2# ./SystemInfoExample.py

     

     

    Javaの場合

    1. SystemInfoExample.java を作成します
      import com.cisco.aesop.apphosting.serviceapi.*;
      import com.cisco.aesop.apphosting.serviceapi.axpsystemapi.*;
      import java.io.IOException;

      public class SystemInfoExample {
           public static void main(String args[]) {
               //Static call to get SysInfoRequest object.
               SysInfoRequest sysInfo = AxpSystemAPI.getSysInfoRequest();
               /* -----------------------
                * get swap information
                * -----------------------
               */
               try {
                   //Get the swap space information
                   sysInfo.setReqName("swapStatistics");
                   SysInfoResponse resp = sysInfo.execute();
                   //Get the list of lists.
                   ParamListList listlist = resp.getParamListList();
                   //Get the parameter list for the recent key.
                   ParamList list = listlist.getParamListKey(null);
                   //Get the swap data for each supported key.
                   String payloadSF = list.getParamValue("swapFree");
                   String payloadST = list.getParamValue("swapTotal");
                   String payloadSU = list.getParamValue("swapUsed");
                   System.out.println("swapFree is " + payloadSF);
                   System.out.println("swapTotal is " + payloadST);
                   System.out.println("swapUsed is " + payloadSU);
               } catch (ErrorInfo err) {
                   System.out.println("ErrorInfo.errorCode=" + err.getErrorCode());
                   System.out.println("ErrorInfo.errorMsg=" + err.getErrorMessage());
               }
               /* -----------------------
                * get router IP address
                * -----------------------
               */
               try {
                   sysInfo.setReqName("routerInfo");
                   SysInfoResponse resp = sysInfo.execute();
                   ParamListList listlist = resp.getParamListList();
                   ParamList list = listlist.getParamListKey(null);
                   String ip = list.getParamValue("ipAddress");
                   System.out.println("IP Address of the router is " + ip);
               } catch (ErrorInfo err) {
                   System.out.println("ErrorInfo.errorCode=" + err.getErrorCode());
                   System.out.println("ErrorInfo.errorMsg=" + err.getErrorMessage());
               }
           }
      }
    2. コンパイルします。
      [sample]$ javac -cp /opt/axp/sdk/jar/axpsystemapi.jar SystemInfoExample.java
    3. SystemInfoExample.class をパッケージに含めてAXPにインストールします。(rsync,scpなどでコピーしてもよいです)
      ※jreをRPMでインストールすることを忘れないでください。
    4. 実行します。
      bash-3.2# java -cp /usr/lib/java/axpsystemapi.jar:/usr/lib/java/localsocket.jar:/usr/lib/java/xercesImpl.jar:. SystemInfoExample

     

     

    Cの場合

    1. ソースコードおよびMakefileを作成します。
      SystemInfoExample.cの例
      #include <stdio.h>
      #include <stdlib.h>
      #include "AxpServiceAPI.h"
      #include "utilServiceAPI.h"
      int main (int argc, char *argv[])
      {
               SysInfoRequest *sysInfo = NULL;
               SysInfoResponse *sysResp = NULL;
               //Get SysInfo pointer
               getSysInfoRequest(&sysInfo);
               // ----------------------------------------------
               // Get Swap Space Info
               // ----------------------------------------------
               //Request swap information
               sysInfo->setReqName(sysInfo, "swapStatistics");
               //Execute request
               if (sysInfo->execute(sysInfo, &sysResp) == AXP_API_OK) {
                       //Get list containing parameter lists.
                       ParamListList *listlist = sysResp->getParamListList(sysResp);
                       //Get recently filled parameter list
                       ParamList *list = listlist->getParamListKey(listlist, NULL);
                       //Get and print value for each parameter.
                       printf("swapFree = %s \n", list->getParamValue(list, "swapFree"));
                       printf("swapTotal = %s \n", list->getParamValue(list, "swapTotal"));
                       printf("swapUsed = %s \n", list->getParamValue(list, "swapUsed"));
                       //Free memory
                       sysResp->destroy(sysResp);
               }
               // ----------------------------------------------
               // Get Router Info.
               // ----------------------------------------------
               sysInfo->setReqName(sysInfo, "routerInfo");
               if (sysInfo->execute(sysInfo, &sysResp) == AXP_API_OK) {
                       ParamListList *listlist = sysResp->getParamListList(sysResp);
                       ParamList *list = listlist->getParamListKey(listlist, NULL);
                       printf("Router IP Address = %s \n", list->getParamValue(list, "ipAddress"));
                       sysResp->destroy(sysResp);
               }
               return 0;
      }
      Makefileの例
      AXPDIR = /opt/AXP/sdk
      LIBDIR = $(AXPDIR)/lib
      INCDIR = $(AXPDIR)/include

      LDFLAGS = -L$(LIBDIR) -ldl -lc -lpthread -lutilserviceapi -llocal_socket -laxpsystemapi -lxerces-c

      CC = $(PREFIX)gcc
      LD = $(CC)
      CFLAGS = $(CMODE) -Wall -I$(INCDIR) -O0 -g3

      OBJECTS = SystemInfoExample.o

      %.o: %.c
               $(CC) $(CFLAGS) -c $< -o $@

      SystemInfoExample: SystemInfoExample.o
               $(LD) -o SystemInfoExample SystemInfoExample.o $(LDFLAGS)

      clean:
               rm -f *.o SystemInfoExample
    2. コンパイルします
    3. SystemInfoExample をパッケージに含めてAXPにインストールします。(rsync,scpなどでコピーしてもよいです)
    4. 実行します。
      bash-3.2# ./SystemInfoExample

     

    SysInfo APIの詳細については、Developer GuideのAXP SysInfo API を参照してください。