/* * Copyright (c) 2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.logsvc; import com.emc.storageos.svcs.errorhandling.resources.APIException; import com.emc.storageos.systemservices.impl.resource.util.ClusterNodesUtil; import com.emc.storageos.systemservices.impl.resource.util.NodeInfo; import com.emc.vipr.model.sys.logging.LogRequestBase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.core.MediaType; import java.util.*; /** * Class for handling a log request by setting and updating the log levels on * all nodes based on the parameters of a specific log request. */ public abstract class BaseLogManager { // Logger reference. private static final Logger _log = LoggerFactory.getLogger(BaseLogManager.class); // Local URL format for internal nodes protected static final String BASE_URL_FORMAT = "http://%1$s:%2$s"; // A reference to the configurable properties loader. protected LogSvcPropertiesLoader _propertiesLoader; // Data specifying the parameters of the log request. protected LogRequestBase _logReqInfo; // Request media type which is used to decide response media type. protected MediaType _mediaType; /** * Constructor. * * @param propertiesLoader A reference to the configurable properties loader. * @throws APIException When a null parameter is passed. */ public BaseLogManager(LogRequestBase logReqInfo, MediaType mediaType, LogSvcPropertiesLoader propertiesLoader) { _logReqInfo = logReqInfo; _mediaType = mediaType; _propertiesLoader = propertiesLoader; if (_propertiesLoader == null) { throw APIException.internalServerErrors.targetIsNullOrEmpty("PropertiesLoader"); } } /** * Gets a reference to the node info for the nodes in the Bourne cluster * with the passed nodes identifiers. * * @param nodeIds The ids of the desired cluster nodes. * @return A list containing the connection info for the desired nodes. * @throws APIException When an exception occurs trying to get the * cluster nodes. */ protected List<NodeInfo> getClusterNodesWithIds(List<String> nodeIds) { List<NodeInfo> matchingNodes = new ArrayList<NodeInfo>(); List<NodeInfo> nodeInfoList = ClusterNodesUtil.getClusterNodeInfo(); for (NodeInfo node : nodeInfoList) { if (nodeIds.contains(node.getId())) { matchingNodes.add(node); } } return matchingNodes; } }