Please enter search query.
Search <book_title>...
InfoScale™ 9.0 Cluster Server Agent Developer's Guide - AIX, Linux, Solaris, Windows
Last Published:
2025-09-09
Product(s):
InfoScale & Storage Foundation (9.0)
Platform: AIX,Linux,Solaris,Windows
- Introduction
- Agent entry point overview
- About agent entry points
- Agent entry points described
- About the open entry point
- About the monitor entry point
- About the online entry point
- About the offline entry point
- About the clean entry point
- About the action entry point
- About the info entry point
- About the attr_changed entry point
- About the close entry point
- About the shutdown entry point
- About the imf_init entry point
- About the imf_register entry point
- About the imf_getnotification entry point
- About the migrate entry point
- About the meter entry point
- Return values for entry points
- Considerations for using C++ or script entry points
- About the agent information file
- About the ArgList and ArgListValues attributes
- Creating entry points in C++
- About creating entry points in C++
- Data Structures
- Syntax for C++ entry points
- Agent framework primitives
- VCSAgGetMonitorLevel
- VCSAgGetFwVersion
- VCSAgGetRegVersion
- VCSAgRegisterEPStruct
- VCSAgSetCookie2
- VCSAgRegister
- VCSAgUnregister
- VCSAgGetCookie
- VCSAgStrlcpy
- VCSAgStrlcat
- VCSAgSnprintf
- VCSAgCloseFile
- VCSAgDelString
- VCSAgExec
- VCSAgExecWithTimeout
- VCSAgGenSnmpTrap
- VCSAgSendTrap
- VCSAgLockFile
- VCSAgInitEntryPointStruct
- VCSAgSetStackSize
- VCSAgUnlockFile
- VCSAgValidateAndSetEntryPoint
- VCSAgSetLogCategory
- VCSAgGetProductName
- VCSAgMonitorReturn
- VCSAgSetResEPTimeout
- VCSAgDecryptKey
- VCSAgGetConfDir
- VCSAgGetHomeDir
- VCSAgGetLogDir
- VCSAgGetSystemName
- VCSAG_CONSOLE_LOG_MSG
- VCSAG_LOG_MSG
- VCSAG_LOGDBG_MSG
- VCSAG_RES_LOG_MSG
- Agent Framework primitives for container support
- Creating entry points in scripts
- About creating entry points in scripts
- Syntax for script entry points
- Syntax for the monitor script
- Syntax for the online script
- Syntax for the offline script
- Syntax for the clean script
- Syntax for the action script
- Syntax for the attr_changed script
- Syntax for the info script
- Syntax for the open script
- Syntax for the close script
- Syntax for the shutdown script
- Syntax for the imf_init script
- Syntax for the imf_register script
- Syntax for the imf_getnotification script
- Syntax for migrate script
- Syntax for meter script
- Agent framework primitives
- VCSAG_GET_MONITOR_LEVEL
- VCSAG_GET_AGFW_VERSION
- VCSAG_GET_REG_VERSION
- VCSAG_SET_RES_EP_TIMEOUT
- VCSAG_GET_ATTR_VALUE
- To get number of keys in the key list attribute and the index of attribute in argument list
- To get a particular key in the key list and vector attribute
- To get the number of keys in the association attribute, and index of attribute in the argument list
- To get a particular key or value in the association attribute:
- VCSAG_SET_RESINFO
- VCSAG_MONITOR_EXIT
- VCSAG_SYSTEM
- VCSAG_SU
- VCSAG_RETURN_IMF_RESID
- VCSAG_RETURN_IMF_EVENT
- VCSAG_BLD_PSCOMM
- VCSAG_PHANTOM_STATE
- VCSAG_SET_ENVS
- VCSAG_LOG_MSG
- VCSAG_LOGDBG_MSG
- VCSAG_SQUEEZE_SPACES
- Agent Framework primitives with container support
- Example script entry points
- Logging agent messages
- Building a custom agent
- Building a script based IMF-aware custom agent
- About building a script based IMF-aware custom agent
- Linking AMF plugins with script agent
- Creating XML file required for AMF plugins to do resource registration for online and offline state monitoring
- Example of amfregister.xml for registration of process-based resource with AMF for online monitoring
- Example of amfregister.xml for registration of process-based resource with AMF for offline monitoring
- Example of amfregister.xml for online and offline IMF monitoring for a given process
- Examples for adding RepearName tag in amfregister.xml
- Adding IMF and IMFRegList attributes in configuration
- Monitor without IMF integration
- Monitor without IMF but with LevelTwo monitor frequency
- Monitor with IMF integration
- Monitor with IMF but with LevelTwo monitor frequency
- Installing the IMF-aware script-based custom agent
- Testing agents
- Static type attributes
- About static attributes
- Static type attribute definitions
- ActionTimeout
- AdvDbg
- AEPTimeout
- AgentClass
- AgentDirectory
- AgentFailedOn
- AgentFile
- AgentPriority
- AgentReplyTimeout
- AgentStartTimeout
- AlertOnMonitorTimeouts
- ArgList
- AttrChangedTimeout
- AvailableMeters
- CleanRetryLimit
- CleanTimeout
- CloseTimeout
- ContainerOpts
- ConfInterval
- EPClass
- EPPriority
- ExternalStateChange
- FaultOnMonitorTimeouts
- FaultPropagation
- FireDrill
- IMF
- IMFRegList
- InfoInterval
- InfoTimeout
- IntentionalOffline
- LevelTwoMonitorFreq
- LogDbg
- LogFileSize
- LogViaHalog
- ManageFaults
- Meters
- MeterControl
- MeterRegList
- MeterRetryLimit
- MeterTimeout
- MonitorInterval
- MonitorStatsParam
- MonitorTimeout
- MigrateTimeout
- MigrateWaitLimit
- NumThreads
- OfflineMonitorInterval
- OfflineTimeout
- OfflineWaitLimit
- OnlineClass
- OnlinePriority
- OnlineRetryLimit
- OnlineTimeout
- OnlineWaitLimit
- OpenTimeout
- Operations
- RegList
- RestartLimit
- ScriptClass
- ScriptPriority
- SourceFile
- SupportedActions
- SupportedOperations
- ToleranceLimit
- State transition diagram
- Internationalized messages
- Troubleshooting VCS resource's unexpected behavior using First Failure Data Capture (FFDC)
- Appendix A. Using pre-5.0 VCS agents
Examples of logging APIs used in a C++ agent
#include <stdio.h>
#include <locale.h>
#include "VCSAgApi.h"
void res_attr_changed(const char *res_name, const char
*changed_res_name,const char *changed_attr_name, void
**new_val)
{
/*
* NOT REQUIRED if the function is empty or is not logging
* any messages to the agent log file
*/
VCSAG_LOG_INIT("res_attr_changed");
}
extern "C" unsigned int
res_clean(const char *res_name, VCSAgWhyClean wc, void
**attr_val)
{
VCSAG_LOG_INIT("res_clean");
if ((attr_val) && (*attr_val)) {
if ((remove((CHAR *)(*attr_val)) == 0) || (errno
== ENOENT)) { return 0; // Success
}
}
return 1; // Failure
}
void res_close(const char *res_name, void **attr_val)
{
VCSAG_LOG_INIT("res_close");
}
//
// Determine if the given file is online (file exists) or
// offline (file does not exist).
//
extern "C" VCSAgResState
res_monitor(const char *res_name, void **attr_val, int
*conf_level)
{
VCSAG_LOG_INIT("res_monitor");
VCSAgResState state = VCSAgResUnknown;
*conf_level = 0;
/*
* This msg will be printed for all resources if VCS_DBG4
* is enabled for the resource type. Else it will be
* logged only for that resource that has the dbg level
* VCS_DBG4 enabled
*/
VCSAG_RES_LOG_MSG(VCS_DBG4, VCS_DEFAULT_FLAGS, "PathName
is(%s)", (CHAR *)(*attr_val));
if ((attr_val) && (*attr_val)) {
struct stat stat_buf;
if ( (stat((CHAR *)(* attr_val), &stat_buf) == 0)
&& (strlen((CHAR *)(* attr_val)) != 0) ) {
state = VCSAgResOnline; *conf_level = 100;
}
else {
state = VCSAgResOffline;
*conf_level = 0;
}
}
VCSAG_RES_LOG_MSG(VCS_DBG7, VCS_DEFAULT_FLAGS, "State is
(%d)", (int)state);
return state;
}
extern "C" unsigned int
res_online(const char *res_name, void **attr_val) {
int fd = -1;
VCSAG_LOG_INIT("res_online");
if ((attr_val) && (*attr_val)) {
if (strlen((CHAR *)(* attr_val)) == 0) {
VCSAG_LOG_MSG(VCS_WARNING, 3001, VCS_DEFAULT_FLAGS,
"The value for PathName attribute is not
specified");
VCSAG_CONSOLE_LOG_MSG(VCS_WARNING, 3001,
VCS_DEFAULT_FLAGS,
"The value for PathName attribute is not
specified");
return 0;
}
if (fd = creat((CHAR *)(*attr_val), S_IRUSR|S_IWUSR) < 0) {
VCSAG_LOG_MSG(VCS_ERROR, 3002, VCS_DEFAULT_FLAGS,
"Resource could not be brought up because, "
"the attempt to create the file(%s) failed "
"with error(%d)", (CHAR *)(*attr_val), errno);
VCSAG_CONSOLE_LOG_MSG(VCS_ERROR, 3002,
VCS_DEFAULT_FLAGS,
"Resource could not be brought up because, "
"the attempt to create the file(%s) failed "
"with error(%d)", (CHAR *)(*attr_val), errno);
return 0;
}
close(fd);
}
return 0;
}
extern "C" unsigned int
res_offline(const char *res_name, void **attr_val)
{
VCSAG_LOG_INIT("res_offline");
if ((attr_val) && (*attr_val) && (remove((CHAR*)
(*attr_val)) != 0) && (errno != ENOENT)) {
VCSAG_LOG_MSG(VCS_ERROR, 14002, VCS_DEFAULT_FLAGS,
"Resource could not be brought down because, the
attempt to remove the file(%s) failed with
error(%d)", (CHAR *)(*attr_val), errno);
VCSAG_CONSOLE_LOG_MSG(VCS_ERROR, 14002,
VCS_DEFAULT_FLAGS, "Resource could not be brought
down because, the attempt to remove the file(%s)
failed with error(%d)", (CHAR *)(*attr_val), errno);
}
return 0;
}
void res_open(const char *res_name, void **attr_val)
{
VCSAG_LOG_INIT("res_open");
}
VCSEXPORT void VCSDECL VCSAgStartup()
{
VCSAG_LOG_INIT("VCSAgStartup");
VCSAgInitEntryPointStruct(V51);
VCSAgValidateAndSetEntryPoint(VCSAgEPMonitor,
res_monitor);
VCSAgValidateAndSetEntryPoint(VCSAgEPOnline,
res_online);
VCSAgValidateAndSetEntryPoint(VCSAgEPOffline,
res_offline);
VCSAgValidateAndSetEntryPoint(VCSAgEPClean, res_clean);
VCSAgSetLogCategory(2001);
char *s = setlocale(LC_ALL, NULL);
VCSAG_LOGDBG_MSG(VCS_DBG1, VCS_DEFAULT_FLAGS, "Locale is
%s", s);
}