package models.data.providers;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import models.data.AggregationNodeMetadata;
import models.data.RawDataSourceType;
import models.data.StrStrMap;
import models.data.providers.AgentCommadProviderHelperAggregation;
import models.data.providers.AgentCommandProvider;
import models.data.providers.NodeGroupProvider;
import models.rest.beans.responses.AggregationResponse;
import models.utils.DateUtils;
import models.utils.VarUtils;
/**
* 20140111: for the single server multiple requests; only support a single VAR
* replacement
*
* @author ypei
*
*/
public class CommandProviderSingleServerHelper {
/**
*
* @param targetNodes
* @param attributeName
* @param attributeValue
*/
public static String commandToSingleTargetServer(List<String> targetNodes,
String agentCommandType, String varName,
String targetServerNew) {
String nodeGroupType = null;
try {
if (targetNodes == null || targetNodes.isEmpty()
|| agentCommandType == null
|| varName == null
|| targetServerNew == null) {
models.utils.LogUtils
.printLogError("targetNodes or agentCommandType or varName or willReplaceTargetServer or targetServerNew is NULL or empty; now exit in func assetDiscoveryWorkFlow() !!"
+ DateUtils.getNowDateTimeStrSdsm());
return nodeGroupType;
}
/**
* STEP 0: Generate the adhoc node group
*/
// this nodeGroupType has the timestamp.
nodeGroupType = NodeGroupProvider
.generateAdhocNodeGroupHelper(targetNodes);
Map<String, AggregationNodeMetadata> nodeValueMap = AggregationNodeMetadata.generateAggregationNodeMetadataMapFromNodeList(targetNodes);
/**
* STEP1 to have this replaced
*/
Boolean willReplaceTargetServer = true;
Map<String, StrStrMap> replacementVarMapNodeSpecific = generateReplacementVarMapNodeSpecificGenericSingleVar(
nodeValueMap, varName,
willReplaceTargetServer, targetServerNew);
AgentCommandProvider
.generateUpdateSendAgentCommandWithReplaceVarMapNodeSpecificAdhoc(
nodeGroupType, agentCommandType,
replacementVarMapNodeSpecific);
} catch (Throwable t) {
t.printStackTrace();
models.utils.LogUtils
.printLogError("Error in function assetDiscoveryWorkFlow()"
+ t.getLocalizedMessage()
+ DateUtils.getNowDateTimeStrSdsm());
}
return nodeGroupType;
}// end func.
/**
* Replace a single variable. This is a pretty generic one
*
* @param nodeValueMap
* @param varName
* @param willReplaceTargetServer
* @param targetServerNew
* @return
*/
public static Map<String, StrStrMap> generateReplacementVarMapNodeSpecificGenericSingleVar(
Map<String, AggregationNodeMetadata> nodeValueMap, String varName,
Boolean willReplaceTargetServer, String targetServerNew) {
Map<String, StrStrMap> replacementVarMapNodeSpecific = new HashMap<String, StrStrMap>();
try {
// Validation
if (nodeValueMap == null || nodeValueMap.isEmpty()) {
models.utils.LogUtils
.printLogError("ERROR Validation: nodeValueMap==null || nodeValueMap.isEmpty()in generateReplacementVarMapNodeSpecificForUuid() ");
return replacementVarMapNodeSpecific;
}
for (Entry<String, AggregationNodeMetadata> entry : nodeValueMap
.entrySet()) {
String fqdn = entry.getKey();
AggregationNodeMetadata nodeMetadata = entry.getValue();
StrStrMap strStrMap = new StrStrMap();
if (nodeMetadata.isError()) {
// not to fire requests for this node; sinc even the last
// step does not have the value extracted. (e.g. fail to get
// response back)
// therefore; this step will not really to fire requests.
strStrMap.getMap().put(VarUtils.NA, VarUtils.NA);
} else {
// for requests to a single server
if (willReplaceTargetServer) {
strStrMap
.getMap()
.put(VarUtils.VAR_NAME_APIVARREPLACE_SUPERMANSPECIAL_TARGET_NODE_VAR_WHEN_INSERT,
targetServerNew);
}
// get from the aggregation from last step and push it into
// the nodemap
String valueFromLastAggregationForThisFqdn = nodeMetadata
.getValue();
strStrMap.getMap().put(varName,
valueFromLastAggregationForThisFqdn);
}
replacementVarMapNodeSpecific.put(fqdn, strStrMap);
}// end for
;
} catch (Throwable t) {
t.printStackTrace();
models.utils.LogUtils
.printLogError("Error in function generateReplacementVarMapNodeSpecificForUuid()"
+ t.getLocalizedMessage()
+ DateUtils.getNowDateTimeStrSdsm());
}
return replacementVarMapNodeSpecific;
}
}