//
// ClusterCategory.c++
//
// Category for clusters.
//
//
// Copyright (c) 1998, 2000 Silicon Graphics, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of version 2.1 of the GNU Lesser General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it would be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// Further, this software is distributed without any warranty that it is
// free of the rightful claim of any third person regarding infringement
// or the like. Any license provided herein, whether implied or
// otherwise, applies only to this software file. Patent licenses, if
// any, provided herein do not apply to combinations of this program
// with other software, or any other product whatsoever.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, write the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
// USA.
//
// Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
// Mountain View, CA 94043, or http://www.sgi.com/
//
// For further information regarding this notice, see:
// http://oss.sgi.com/projects/GenInfo/NoticeExplan/
//
#ident "$Revision: 1.12 $"
#include <sys/types.h>
#include <stdio.h>
#include <ci_clikeys.h>
#include <ci_camvalues.h>
#include <sysadm/Command.h>
#include <sysadm/AppContext.h>
#include <sysadm/Log.h>
#include <fsmgr/ClusterCategory.h>
namespace fsmgr {
SaCATEGORY_REF_DEF(ClusterCategory);
//
// ClusterCategory contstructor.
//
ClusterCategory::ClusterCategory()
: CamCategory("ClusterCategory", cam_category_cluster)
{
addCategory(cam_category_cluster_status);
addCategory(cam_category_ha_services_parameters);
}
//
// void ClusterCategory::modifyItemOnCamEvent(Item* item)
//
// Description:
// Synthesize status attributes.
//
// Parameters:
// item Item for which to derive any additional attributes
//
void ClusterCategory::modifyItemOnCamEvent(Item* item)
{
CamCategory::modifyItemOnCamEvent(item);
Attribute status(item->getAttr(CICLI_CLUSTER_STATUS));
const char* val = NULL;
if (status == Attribute::NUL) {
val = STATUS_UNKNOWN;
} else {
switch (status.longValue()) {
case CI_CS_INACTIVE:
val = STATUS_INACTIVE;
break;
case CI_CS_ACTIVE:
val = STATUS_ACTIVE;
break;
default:
case CI_CS_UNKNOWN:
val = STATUS_UNKNOWN;
break;
}
}
Attribute rgerr(item->getAttr(CICLI_CLUSTER_RG_INERROR));
if (rgerr != Attribute::NUL && rgerr.booleanValue() == true) {
val = STATUS_ERROR;
}
Attribute nerr(item->getAttr(CICLI_CLUSTER_NODE_INERROR));
if (nerr != Attribute::NUL && nerr.booleanValue() == true) {
val = STATUS_ERROR;
}
assert(val != NULL);
item->setAttr(Attribute(STATUS_KEY, val));
}
//
// String ClusterCategory::getSelectorFromObject(const cam_object_t& obj)
//
// Description:
// Get the selector from an object. We override the default
// CamCategory implementation in order to get the _CLUSTER
// attribute from the ha_services_paramegers category.
//
// Parameters:
// obj Object to get selector from.
//
// Returns:
// Selector for "obj".
//
String ClusterCategory::getSelectorFromObject(const cam_object_t& obj)
{
if (obj.category == cam_category_ha_services_parameters) {
for (int ii = 0; ii < obj.num_info; ii++) {
if ((obj.info[ii]->valid & CAM_OIV_ALL) == CAM_OIV_ALL) {
if (strcmp(obj.info[ii]->key, CICLI_CLUSTER) == 0) {
return obj.info[ii]->value;
}
}
}
}
return CamCategory::getSelectorFromObject(obj);
}
} // namespace fsmgr