Example: Using C++ and script entry points on UNIX

The following example shows how to build the FileOnOff agent using your own VCSAgStartup function, the C++ version of the monitor entry point, and script versions of online and offline entry points. This example implements the VCSAgStartup, online, offline, and monitor entry points only.

To implement the agent using VCSAgStartup, C++, and script entry points

  1. Create a directory for the agent:
    mkdir /opt/VRTSvcs/src/agent/FileOnOff
  2. Copy the contents from the sample agent to the directory you created in the previous step:
    cp -r /opt/VRTSvcs/src/agent/Sample/*
                   /opt/VRTSvcs/src/agent/FileOnOff
  3. Change to the new directory:
    cd /opt/VRTSvcs/src/agent/FileOnOff
  4. Edit the file agent.C and modify the VCSAgStartup()function (the last several lines) to match the following example:
    // Description: This functions registers the entry points //
    void VCSAgStartup()
        {
        VCSAG_LOG_INIT("VCSAgStartup");
    
        VCSAgSetLogCategory(10051);
        VCSAgInitEntryPointStruct(V51);
    
        VCSAgValidateAndSetEntryPoint(VCSAgEPMonitor, res_monitor);
    }
  5. Modify the res_monitor() function:
    // Function:    res_monitor
    // Description: Determine if the given file is online (file exists)
    //              or offline (file does not exist).
    
       VCSAgResState res_monitor(const char *res_name, void
           **attr_val, int *conf_level)
       {
       int ret = 0;
       char *pathname = NULL;
       struct stat64 stat_buf;
       VCSAgResState state = VCSAgResUnknown;
    
       VCSAG_LOG_INIT("res_monitor");
    
       /*
        * Get PathName attribute form attr_val parameter, passed to
    res_offline function and store
        * under pathname variable.
        *
        */
       if (NULL == pathname) {
           return VCSAgResUnknown;
       }
       
       VCSAG_LOGDBG_MSG(VCS_DBG2, VCS_DEFAULT_FLAGS,
           "Checking if file %s exists or not", pathname);
      
       if (0 == stat64(pathname, &stat_buf)) {
           /*
            * If the pathname is a directory, return status as unknown
            */
           if (S_ISDIR(stat_buf.st_mode) != 0) {
               VCSAG_LOG_MSG(VCS_ERROR, 2004, VCS_DEFAULT_FLAGS,
                   "%s is a directory", pathname);
               VCSAG_CONSOLE_LOG_MSG(VCS_ERROR, 2004,
    VCS_DEFAULT_FLAGS,
                    "%s is a directory", pathname);
    
                *conf_level = 0;
                return VCSAgResUnknown;
            }
            *conf_level = 100;
            return VCSAgResOnline;
       }
    
       *conf_level = 0;
       return VCSAgResOffline;
       }
  6. Compile agent.C and build the agent by invoking make. (Makefile is provided.)
    make
  7. Build the script entry points for the agent.

    See Example: Using script entry points on UNIX

  8. Create a directory for the agent:
    mkdir /opt/VRTSvcs/bin/FileOnOff
  9. Install the FileOnOff agent.