All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.miloss.fgsms.sla.rules.InvocationsOverTimeGreatThan Maven / Gradle / Ivy

Go to download

The SLA processor handles rules and actions invocations based on service owner defined rules

The newest version!
/**
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * If it is not possible or desirable to put the notice in a particular
 * file, then You may include the notice in a location (such as a LICENSE
 * file in a relevant directory) where a recipient would be likely to look
 * for such a notice.

 * 
 */
 
/*  ---------------------------------------------------------------------------
 *  U.S. Government, Department of the Army
 *  Army Materiel Command
 *  Research Development Engineering Command
 *  Communications Electronics Research Development and Engineering Center
 *  ---------------------------------------------------------------------------
 */
 
package org.miloss.fgsms.sla.rules;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import org.miloss.fgsms.common.Utility;
import org.miloss.fgsms.plugins.sla.AlertType;
import org.miloss.fgsms.plugins.sla.SLARuleInterface;
import org.miloss.fgsms.services.interfaces.common.MachinePerformanceData;
import org.miloss.fgsms.services.interfaces.common.NameValuePair;
import org.miloss.fgsms.services.interfaces.common.PolicyType;
import org.miloss.fgsms.services.interfaces.common.ProcessPerformanceData;
import org.miloss.fgsms.services.interfaces.datacollector.AddDataRequestMsg;
import org.miloss.fgsms.services.interfaces.datacollector.BrokerData;
import org.miloss.fgsms.services.interfaces.policyconfiguration.ServicePolicy;
import org.miloss.fgsms.services.interfaces.policyconfiguration.TransactionalWebServicePolicy;
import org.miloss.fgsms.services.interfaces.status.SetStatusRequestMsg;
import org.miloss.fgsms.sla.NonTransactionalSLAProcessor;

/**
 *
 * @author AO
 */
public class InvocationsOverTimeGreatThan implements SLARuleInterface {

    @Override
    public boolean CheckTransactionalRule(SetStatusRequestMsg req, List params, AtomicReference nullableFaultMsg) {
        return false;
    }

    @Override
    public boolean CheckTransactionalRule(ProcessPerformanceData req, List params, AtomicReference nullableFaultMsg) {
        return false;
    }

    @Override
    public boolean CheckTransactionalRule(MachinePerformanceData req, List params, AtomicReference nullableFaultMsg) {
        return false;
    }

    @Override
    public boolean CheckTransactionalRule(AddDataRequestMsg req, List params, AtomicReference nullableFaultMsg) {
        return false;
    }

    @Override
    public boolean CheckTransactionalRule(String url, List data, List params, AtomicReference nullableFaultMsg) {
        return false;
    }

    @Override
    public boolean CheckNonTransactionalRule(ServicePolicy pol, List params, AtomicReference nullableFaultMsg, boolean pooled) {
        if (nullableFaultMsg == null) {
            nullableFaultMsg = new AtomicReference();
        }
        NameValuePair GetNameValuePairByName = Utility.getNameValuePairByName(params, "value");
        long rate = Long.parseLong(GetNameValuePairByName.getValue());
        GetNameValuePairByName = Utility.getNameValuePairByName(params, "duration");
        long duration = Long.parseLong(GetNameValuePairByName.getValue());
        //    long rate = x.getFaults();//) / (double) (Utility.durationToTimeInMS(x.getTime())));
        long faultrate = NonTransactionalSLAProcessor.GrabInvocationRate(duration, pol.getURL());
        if (faultrate > rate) {
            nullableFaultMsg.set("Invocations Over Time measured value of " + faultrate + " is greater than " + rate + ", " + nullableFaultMsg.get());
            return true;
        }
        return false;
    }

    @Override
    public String GetDisplayName() {
        return "Service Invocations (Transactions) over time is greater than (value)";
    }

    @Override
    public String GetHtmlFormattedHelp() {
        return "This rule will trigger when the number of service invocations (transactions) over time is greater than the specified value for the specified duration."
                + "This rule is processed periodically as part of the Non-Transactional SLA Processor, who execution cycle is controled by the administrator. "
                + "This rule applies to transactional service policies only.

" + "Required parameters:" + "
    " + "
  • value - must be a positive integer. This is the threshold
  • " + "
  • duration - must be a positive integer or long. This represents time in milliseconds for the duration. It must be one of the values from which" + "statistics are aggregated. By default, the following durations are calculated 5 minutes (300000ms), 15 minutes (900000ms), 1 hour (3600000ms)," + "and 24 hours (1440000ms). Administrators can add additional time periods for aggregation via General Settings." + "" + "
"; } @Override public List GetRequiredParameters() { ArrayList arrayList = new ArrayList(); arrayList.add(Utility.newNameValuePair("value", null, false, false)); arrayList.add(Utility.newNameValuePair("duration", null, false, false)); return arrayList; } @Override public List GetOptionalParameters() { return new ArrayList(); } @Override public boolean ValidateConfiguration(List params, AtomicReference outError,ServicePolicy policy) { if (outError == null) { outError = new AtomicReference(); } if (params == null || params.isEmpty()) { outError.set("The parameter 'value' is required. " + outError.get()); } if (!(policy instanceof TransactionalWebServicePolicy)) { outError.set("This rule only applies to Transactional Service Policies. " + outError.get()); } boolean foundLogger = false; boolean foundduration = false; for (int i = 0; i < params.size(); i++) { if (params.get(i).getName().equals("value")) { foundLogger = true; if (Utility.stringIsNullOrEmpty(params.get(i).getValue())) { outError.set("A value must be specified for the parameter 'value'. " + outError.get()); } try { long x = Long.parseLong(params.get(i).getValue()); if (x <= 0) { outError.set("The parameter 'value' must be greater than zero. " + outError.get()); } } catch (Exception ex) { outError.set("Bad value for parameter 'value'. It must be an integer or long. Message:" + ex.getMessage() + ". " + outError.get()); } } if (params.get(i).getName().equals("duration")) { foundduration = true; if (Utility.stringIsNullOrEmpty(params.get(i).getValue())) { outError.set("A value must be specified for the parameter 'duration'. " + outError.get()); } try { long x = Long.parseLong(params.get(i).getValue()); if (x <= 0) { outError.set("The parameter 'duration' must be greater than zero. " + outError.get()); } } catch (Exception ex) { outError.set("Bad value for parameter 'duration'. It must be an integer or long. Message:" + ex.getMessage() + ". " + outError.get()); } } } if (!foundLogger) { outError.set("The parameter 'value' is required. " + outError.get()); } if (!foundduration) { outError.set("The parameter 'duration' is required. " + outError.get()); } if (Utility.stringIsNullOrEmpty(outError.get())) { return true; } else { return false; } } @Override public AlertType GetType() { return AlertType.Performance; } @Override public String GetHtmlFormattedDisplay(List params) { NameValuePair mc = Utility.getNameValuePairByName(params, "value"); String item = UNDEFINED_VALUE; if (mc != null) { item = mc.getValue(); if (mc.isEncrypted() || mc.isEncryptOnSave()) { item = ENCRYPTED_MASK; } } NameValuePair mc2 = Utility.getNameValuePairByName(params, "duration"); String item2 = UNDEFINED_VALUE; if (mc2 != null) { item2 = mc2.getValue(); if (mc2.isEncrypted() || mc2.isEncryptOnSave()) { item2 = ENCRYPTED_MASK; } } return Utility.encodeHTML(GetDisplayName() + " " + item + "/" + item2+"ms"); } @Override public List GetAppliesTo() { List ret = new ArrayList(); ret.add(PolicyType.TRANSACTIONAL); return ret; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy