http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java deleted file mode 100644 index 659751f..0000000 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesClusterMonitor.java +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.stratos.autoscaler.monitor.cluster; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.context.cluster.KubernetesClusterContext; -import org.apache.stratos.autoscaler.context.member.MemberStatsContext; -import org.apache.stratos.autoscaler.client.CloudControllerClient; -import org.apache.stratos.autoscaler.exception.cartridge.TerminationException; -import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; -import org.apache.stratos.common.constants.StratosConstants; -import org.apache.stratos.messaging.domain.topology.Cluster; -import org.apache.stratos.messaging.domain.topology.ClusterStatus; -import org.apache.stratos.messaging.domain.topology.Member; -import org.apache.stratos.messaging.domain.topology.Service; -import org.apache.stratos.messaging.event.health.stat.AverageLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.AverageMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.AverageRequestsInFlightEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.GradientOfRequestsInFlightEvent; -import org.apache.stratos.messaging.event.health.stat.MemberAverageLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberAverageMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.MemberFaultEvent; -import org.apache.stratos.messaging.event.health.stat.MemberGradientOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberGradientOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.MemberSecondDerivativeOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfLoadAverageEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfMemoryConsumptionEvent; -import org.apache.stratos.messaging.event.health.stat.SecondDerivativeOfRequestsInFlightEvent; -import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; -import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; -import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent; -import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent; -import org.apache.stratos.messaging.event.topology.MemberStartedEvent; -import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent; -import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; -import org.drools.runtime.StatefulKnowledgeSession; - -/* - * Every kubernetes cluster monitor should extend this class - */ -public class KubernetesClusterMonitor extends VMClusterMonitor { - - private static final Log log = LogFactory.getLog(KubernetesClusterMonitor.class); - -// private StatefulKnowledgeSession dependentScaleCheckKnowledgeSession; - - protected KubernetesClusterMonitor(Cluster cluster, boolean hasScalingDependents, boolean groupScalingEnabledSubtree) { - - super(cluster, hasScalingDependents, groupScalingEnabledSubtree); - - autoscalerRuleEvaluator = new AutoscalerRuleEvaluator(); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE); - autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.DEPENDENT_SCALE_CHECK_DROOL_FILE); - - this.obsoleteCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.CONTAINER_OBSOLETE_CHECK_DROOL_FILE); - this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.CONTAINER_SCALE_CHECK_DROOL_FILE); - this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.CONTAINER_MIN_CHECK_DROOL_FILE); - this.dependentScaleCheckKnowledgeSession = autoscalerRuleEvaluator.getStatefulSession( - StratosConstants.DEPENDENT_SCALE_CHECK_DROOL_FILE); - - //this.kubernetesClusterCtxt = kubernetesClusterContext; - } - -// @Override -// public void handleAverageLoadAverageEvent( -// AverageLoadAverageEvent averageLoadAverageEvent) { -// -// String clusterId = averageLoadAverageEvent.getClusterId(); -// float value = averageLoadAverageEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Avg load avg event: [cluster] %s [value] %s", -// clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setAverageLoadAverage(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// -// } -// -// @Override -// public void handleGradientOfLoadAverageEvent( -// GradientOfLoadAverageEvent gradientOfLoadAverageEvent) { -// -// String clusterId = gradientOfLoadAverageEvent.getClusterId(); -// float value = gradientOfLoadAverageEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Grad of load avg event: [cluster] %s [value] %s", -// clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setLoadAverageGradient(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleSecondDerivativeOfLoadAverageEvent( -// SecondDerivativeOfLoadAverageEvent secondDerivativeOfLoadAverageEvent) { -// -// String clusterId = secondDerivativeOfLoadAverageEvent.getClusterId(); -// float value = secondDerivativeOfLoadAverageEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Second Derivation of load avg event: [cluster] %s " -// + "[value] %s", clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setLoadAverageSecondDerivative(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleAverageMemoryConsumptionEvent( -// AverageMemoryConsumptionEvent averageMemoryConsumptionEvent) { -// -// String clusterId = averageMemoryConsumptionEvent.getClusterId(); -// float value = averageMemoryConsumptionEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Avg Memory Consumption event: [cluster] %s " -// + "[value] %s", averageMemoryConsumptionEvent.getClusterId(), value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setAverageMemoryConsumption(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleGradientOfMemoryConsumptionEvent( -// GradientOfMemoryConsumptionEvent gradientOfMemoryConsumptionEvent) { -// -// String clusterId = gradientOfMemoryConsumptionEvent.getClusterId(); -// float value = gradientOfMemoryConsumptionEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Grad of Memory Consumption event: [cluster] %s " -// + "[value] %s", clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setMemoryConsumptionGradient(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleSecondDerivativeOfMemoryConsumptionEvent( -// SecondDerivativeOfMemoryConsumptionEvent secondDerivativeOfMemoryConsumptionEvent) { -// -// String clusterId = secondDerivativeOfMemoryConsumptionEvent.getClusterId(); -// float value = secondDerivativeOfMemoryConsumptionEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Second Derivation of Memory Consumption event: [cluster] %s " -// + "[value] %s", clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setMemoryConsumptionSecondDerivative(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleAverageRequestsInFlightEvent( -// AverageRequestsInFlightEvent averageRequestsInFlightEvent) { -// -// float value = averageRequestsInFlightEvent.getValue(); -// String clusterId = averageRequestsInFlightEvent.getClusterId(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Average Rif event: [cluster] %s [value] %s", -// clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setAverageRequestsInFlight(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleGradientOfRequestsInFlightEvent( -// GradientOfRequestsInFlightEvent gradientOfRequestsInFlightEvent) { -// -// String clusterId = gradientOfRequestsInFlightEvent.getClusterId(); -// float value = gradientOfRequestsInFlightEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Gradient of Rif event: [cluster] %s [value] %s", -// clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setRequestsInFlightGradient(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleSecondDerivativeOfRequestsInFlightEvent( -// SecondDerivativeOfRequestsInFlightEvent secondDerivativeOfRequestsInFlightEvent) { -// -// String clusterId = secondDerivativeOfRequestsInFlightEvent.getClusterId(); -// float value = secondDerivativeOfRequestsInFlightEvent.getValue(); -// if (log.isDebugEnabled()) { -// log.debug(String.format("Second derivative of Rif event: [cluster] %s " -// + "[value] %s", clusterId, value)); -// } -// KubernetesClusterContext kubernetesClusterContext = getKubernetesClusterCtxt(); -// if (null != kubernetesClusterContext) { -// kubernetesClusterContext.setRequestsInFlightSecondDerivative(value); -// } else { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Kubernetes cluster context is not available for :" + -// " [cluster] %s", clusterId)); -// } -// } -// } -// -// @Override -// public void handleMemberAverageMemoryConsumptionEvent( -// MemberAverageMemoryConsumptionEvent memberAverageMemoryConsumptionEvent) { -// -// String memberId = memberAverageMemoryConsumptionEvent.getMemberId(); -// KubernetesClusterContext kubernetesClusterCtxt = getKubernetesClusterCtxt(); -// MemberStatsContext memberStatsContext = kubernetesClusterCtxt.getMemberStatsContext(memberId); -// if (null == memberStatsContext) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member context is not available for : [member] %s", memberId)); -// } -// return; -// } -// float value = memberAverageMemoryConsumptionEvent.getValue(); -// memberStatsContext.setAverageMemoryConsumption(value); -// } -// -// @Override -// public void handleMemberGradientOfMemoryConsumptionEvent( -// MemberGradientOfMemoryConsumptionEvent memberGradientOfMemoryConsumptionEvent) { -// -// String memberId = memberGradientOfMemoryConsumptionEvent.getMemberId(); -// KubernetesClusterContext kubernetesClusterCtxt = getKubernetesClusterCtxt(); -// MemberStatsContext memberStatsContext = kubernetesClusterCtxt.getMemberStatsContext(memberId); -// if (null == memberStatsContext) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member context is not available for : [member] %s", memberId)); -// } -// return; -// } -// float value = memberGradientOfMemoryConsumptionEvent.getValue(); -// memberStatsContext.setGradientOfMemoryConsumption(value); -// } -// -// @Override -// public void handleMemberSecondDerivativeOfMemoryConsumptionEvent( -// MemberSecondDerivativeOfMemoryConsumptionEvent memberSecondDerivativeOfMemoryConsumptionEvent) { -// -// } -// -// @Override -// public void handleMemberAverageLoadAverageEvent( -// MemberAverageLoadAverageEvent memberAverageLoadAverageEvent) { -// -// KubernetesClusterContext kubernetesClusterCtxt = getKubernetesClusterCtxt(); -// String memberId = memberAverageLoadAverageEvent.getMemberId(); -// float value = memberAverageLoadAverageEvent.getValue(); -// MemberStatsContext memberStatsContext = kubernetesClusterCtxt.getMemberStatsContext(memberId); -// if (null == memberStatsContext) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member context is not available for : [member] %s", memberId)); -// } -// return; -// } -// memberStatsContext.setAverageLoadAverage(value); -// } -// -// @Override -// public void handleMemberGradientOfLoadAverageEvent( -// MemberGradientOfLoadAverageEvent memberGradientOfLoadAverageEvent) { -// -// String memberId = memberGradientOfLoadAverageEvent.getMemberId(); -// KubernetesClusterContext kubernetesClusterCtxt = getKubernetesClusterCtxt(); -// MemberStatsContext memberStatsContext = kubernetesClusterCtxt.getMemberStatsContext(memberId); -// if (null == memberStatsContext) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member context is not available for : [member] %s", memberId)); -// } -// return; -// } -// float value = memberGradientOfLoadAverageEvent.getValue(); -// memberStatsContext.setGradientOfLoadAverage(value); -// } -// -// @Override -// public void handleMemberSecondDerivativeOfLoadAverageEvent( -// MemberSecondDerivativeOfLoadAverageEvent memberSecondDerivativeOfLoadAverageEvent) { -// -// String memberId = memberSecondDerivativeOfLoadAverageEvent.getMemberId(); -// KubernetesClusterContext kubernetesClusterCtxt = getKubernetesClusterCtxt(); -// MemberStatsContext memberStatsContext = kubernetesClusterCtxt.getMemberStatsContext(memberId); -// if (null == memberStatsContext) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member context is not available for : [member] %s", memberId)); -// } -// return; -// } -// float value = memberSecondDerivativeOfLoadAverageEvent.getValue(); -// memberStatsContext.setSecondDerivativeOfLoadAverage(value); -// } -// -// @Override -// public void handleMemberFaultEvent(MemberFaultEvent memberFaultEvent) { -// // kill the container -// String memberId = memberFaultEvent.getMemberId(); -// Member member = getMemberByMemberId(memberId); -// if (null == member) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member not found in the Topology: [member] %s", memberId)); -// } -// return; -// } -// if (!member.isActive()) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member activated event has not received for the member %s. " -// + "Therefore ignoring" + " the member fault health stat", memberId)); -// } -// return; -// } -// -// if (!getKubernetesClusterCtxt().activeMemberExist(memberId)) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Could not find the active member in kubernetes cluster context, " -// + "[member] %s ", memberId)); -// } -// return; -// } -// -// // move member to obsolete list -// getKubernetesClusterCtxt().moveMemberToObsoleteList(memberId); -// if (log.isInfoEnabled()) { -// String clusterId = memberFaultEvent.getClusterId(); -// String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); -// log.info(String.format("Faulty member is moved to obsolete list and removed from the active members list: " -// + "[member] %s [kub-cluster] %s [cluster] %s ", memberId, kubernetesClusterID, clusterId)); -// } -// } -// -// @Override -// public void handleMemberStartedEvent( -// MemberStartedEvent memberStartedEvent) { -// -// } -// -// @Override -// public void handleMemberActivatedEvent( -// MemberActivatedEvent memberActivatedEvent) { -// -// KubernetesClusterContext kubernetesClusterContext; -// kubernetesClusterContext = getKubernetesClusterCtxt(); -// String memberId = memberActivatedEvent.getMemberId(); -// kubernetesClusterContext.addMemberStatsContext(new MemberStatsContext(memberId)); -// if (log.isInfoEnabled()) { -// log.info(String.format("Member stat context has been added successfully: " -// + "[member] %s", memberId)); -// } -// kubernetesClusterContext.movePendingMemberToActiveMembers(memberId); -// } -// -// @Override -// public void handleMemberMaintenanceModeEvent( -// MemberMaintenanceModeEvent maintenanceModeEvent) { -// -// // no need to do anything here -// // we will not be receiving this event for containers -// // we will only receive member terminated event -// } -// -// @Override -// public void handleMemberReadyToShutdownEvent( -// MemberReadyToShutdownEvent memberReadyToShutdownEvent) { -// -// // no need to do anything here -// // we will not be receiving this event for containers -// // we will only receive member terminated event -// } -// -// @Override -// public void handleMemberTerminatedEvent( -// MemberTerminatedEvent memberTerminatedEvent) { -// -// String memberId = memberTerminatedEvent.getMemberId(); -// if (getKubernetesClusterCtxt().removeTerminationPendingMember(memberId)) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member is removed from termination pending members list: " -// + "[member] %s", memberId)); -// } -// } else if (getKubernetesClusterCtxt().removePendingMember(memberId)) { -// if (log.isDebugEnabled()) { -// log.debug(String.format("Member is removed from pending members list: " -// + "[member] %s", memberId)); -// } -// } else if (getKubernetesClusterCtxt().removeActiveMemberById(memberId)) { -// log.warn(String.format("Member is in the wrong list and it is removed from " -// + "active members list: %s", memberId)); -// } else if (getKubernetesClusterCtxt().removeObsoleteMember(memberId)) { -// log.warn(String.format("Obsolete member has either been terminated or its obsolete time out has expired and" -// + " it is removed from obsolete members list: %s", memberId)); -// } else { -// log.warn(String.format("Member is not available in any of the list active, " -// + "pending and termination pending: %s", memberId)); -// } -// -// if (log.isInfoEnabled()) { -// log.info(String.format("Member stat context has been removed successfully: " -// + "[member] %s", memberId)); -// } -// } -// -// @Override -// public void handleClusterRemovedEvent( -// ClusterRemovedEvent clusterRemovedEvent) { -// getKubernetesClusterCtxt().getPendingMembers().clear(); -// getKubernetesClusterCtxt().getActiveMembers().clear(); -// getKubernetesClusterCtxt().getTerminationPendingMembers().clear(); -// getKubernetesClusterCtxt().getObsoletedMembers().clear(); -// } -// -// public KubernetesClusterContext getKubernetesClusterCtxt() { -// return (KubernetesClusterContext) getClusterContext(); -// } -// -// private Member getMemberByMemberId(String memberId) { -// try { -// TopologyManager.acquireReadLock(); -// for (Service service : TopologyManager.getTopology().getServices()) { -// for (Cluster cluster : service.getClusters()) { -// if (cluster.memberExists(memberId)) { -// return cluster.getMember(memberId); -// } -// } -// } -// return null; -// } finally { -// TopologyManager.releaseReadLock(); -// } -// } - - @Override - public void terminateAllMembers(String instanceId, String networkPartitionId) { - try { - CloudControllerClient.getInstance().terminateAllContainers(getClusterId()); - } catch (TerminationException e) { - log.error(String.format("Could not terminate containers: [cluster-id] %s", - getClusterId()), e); - } - } -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/d9c323a2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java deleted file mode 100644 index f09f440..0000000 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/KubernetesServiceClusterMonitor.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.stratos.autoscaler.monitor.cluster; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.stratos.messaging.domain.topology.Cluster; - -/* - * It is monitoring a kubernetes service cluster periodically. - */ -public final class KubernetesServiceClusterMonitor extends KubernetesClusterMonitor { - - private static final Log log = LogFactory.getLog(KubernetesServiceClusterMonitor.class); - - private String lbReferenceType; - - public KubernetesServiceClusterMonitor(Cluster cluster, boolean hasScalingDependents, boolean groupScalingEnabledSubtree) { - super(cluster, hasScalingDependents, groupScalingEnabledSubtree); - readConfigurations(); - } - - @Override - public void run() { - - if (log.isDebugEnabled()) { - log.debug("KubernetesServiceClusterMonitor is running..." + this.toString()); - } - try { - - //TODO to get status from correct instance if (!ClusterStatus.Active.getNextStates().contains(getStatus())) { - monitor(); - /*} else { - if (log.isDebugEnabled()) { - log.debug("KubernetesServiceClusterMonitor is suspended as the cluster is in " - + getStatus() + "state"); - } - }*/ - } catch (Exception e) { - log.error("KubernetesServiceClusterMonitor: Monitor failed." + this.toString(), - e); - } - } - -// @Override -// public void monitor() { -// final String instanceId = this.getKubernetesClusterCtxt().getInstanceId(); -// Runnable monitoringRunnable = new Runnable() { -// -// @Override -// public void run() { -// obsoleteCheck(); -// minCheck(); -// scaleCheck(instanceId); -// } -// }; -// monitoringRunnable.run(); -// } -// -// -// private void scaleCheck(String instanceId) { -// boolean rifReset = getKubernetesClusterCtxt().isRifReset(); -// boolean memoryConsumptionReset = getKubernetesClusterCtxt().isMemoryConsumptionReset(); -// boolean loadAverageReset = getKubernetesClusterCtxt().isLoadAverageReset(); -// if (log.isDebugEnabled()) { -// log.debug("flag of rifReset : " + rifReset -// + " flag of memoryConsumptionReset : " -// + memoryConsumptionReset + " flag of loadAverageReset : " -// + loadAverageReset); -// } -// String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); -// String clusterId = getClusterId(); -// if (rifReset || memoryConsumptionReset || loadAverageReset) { -// getScaleCheckKnowledgeSession().setGlobal("clusterId", clusterId); -// getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", getAutoscalePolicy(instanceId)); -// getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset); -// getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset); -// getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset); -// if (log.isDebugEnabled()) { -// log.debug(String.format( -// "Running scale check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId())); -// } -// scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate( -// getScaleCheckKnowledgeSession(), scaleCheckFactHandle, getKubernetesClusterCtxt()); -// getKubernetesClusterCtxt().setRifReset(false); -// getKubernetesClusterCtxt().setMemoryConsumptionReset(false); -// getKubernetesClusterCtxt().setLoadAverageReset(false); -// } else if (log.isDebugEnabled()) { -// log.debug(String.format("Scale check will not run since none of the statistics have not received yet for " -// + "[kub-cluster] : %s [cluster] : %s", kubernetesClusterID, clusterId)); -// } -// } -// -// private AutoscalePolicy getAutoscalePolicy(String instanceId) { -// KubernetesClusterContext kubernetesClusterContext = (KubernetesClusterContext) this.clusterContext; -// return kubernetesClusterContext.getAutoscalePolicy(); -// } -// -// private void minCheck() { -// getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); -// String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); -// if (log.isDebugEnabled()) { -// log.debug(String.format( -// "Running min check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId())); -// } -// minCheckFactHandle = AutoscalerRuleEvaluator.evaluate( -// getMinCheckKnowledgeSession(), minCheckFactHandle, -// getKubernetesClusterCtxt()); -// } -// -// private void obsoleteCheck() { -// getObsoleteCheckKnowledgeSession().setGlobal("clusterId", getClusterId()); -// String kubernetesClusterID = getKubernetesClusterCtxt().getKubernetesClusterID(); -// if (log.isDebugEnabled()) { -// log.debug(String.format( -// "Running obsolete check for [kub-cluster] : %s [cluster] : %s ", kubernetesClusterID, getClusterId())); -// } -// obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate( -// getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, -// getKubernetesClusterCtxt()); -// } -// -// @Override -// public void destroy() { -// getMinCheckKnowledgeSession().dispose(); -// getObsoleteCheckKnowledgeSession().dispose(); -// getScaleCheckKnowledgeSession().dispose(); -// setDestroyed(true); -// stopScheduler(); -// if (log.isDebugEnabled()) { -// log.debug("KubernetesServiceClusterMonitor Drools session has been disposed. " + this.toString()); -// } -// } -// -// @Override -// protected void readConfigurations() { -// XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration(); -// int monitorInterval = conf.getInt(AutoScalerConstants.KubernetesService_Cluster_MONITOR_INTERVAL, 60000); -// setMonitorIntervalMilliseconds(monitorInterval); -// if (log.isDebugEnabled()) { -// log.debug("KubernetesServiceClusterMonitor task interval set to : " + getMonitorIntervalMilliseconds()); -// } -// } -// -// @Override -// public String toString() { -// return "KubernetesServiceClusterMonitor for " + "[ clusterId=" + getClusterId() + "]"; -// } -// -// public String getLbReferenceType() { -// return lbReferenceType; -// } -// -// public void setLbReferenceType(String lbReferenceType) { -// this.lbReferenceType = lbReferenceType; -// } -// -// @Override -// public void handleDynamicUpdates(Properties properties) throws InvalidArgumentException { -// -// if (properties != null) { -// Property[] propertyArray = properties.getProperties(); -// if (propertyArray == null) { -// return; -// } -// List<Property> propertyList = Arrays.asList(propertyArray); -// -// for (Property property : propertyList) { -// String key = property.getName(); -// String value = property.getValue(); -// -// if (StratosConstants.KUBERNETES_MIN_REPLICAS.equals(key)) { -// int min = Integer.parseInt(value); -// int max = getKubernetesClusterCtxt().getMaxReplicas(); -// if (min > max) { -// String msg = String.format("%s should be less than %s . But %s is not less than %s.", -// StratosConstants.KUBERNETES_MIN_REPLICAS, StratosConstants.KUBERNETES_MAX_REPLICAS, min, max); -// log.error(msg); -// throw new InvalidArgumentException(msg); -// } -// getKubernetesClusterCtxt().setMinReplicas(min); -// break; -// } -// } -// -// } -// } -// -// @Override -// public void terminateAllMembers(String instanceId, String networkPartitionId) { -// -// } -// -// @Override -// public void onChildScalingEvent(MonitorScalingEvent scalingEvent) { -// -// } -// -// @Override -// public void onParentScalingEvent(MonitorScalingEvent scalingEvent) { -// -// } -}
