001/*
002 *  Copyright 2016 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.runtime.plugins.admin.jvmstatus.monitoring.alerts;
017
018import java.util.HashMap;
019import java.util.Map;
020
021import org.apache.avalon.framework.configuration.Configuration;
022import org.apache.avalon.framework.configuration.ConfigurationException;
023
024import org.ametys.runtime.config.Config;
025import org.ametys.runtime.i18n.I18nizableText;
026import org.ametys.runtime.plugins.admin.jvmstatus.monitoring.alerts.AlertSampleManager.Threshold.Operator;
027import org.ametys.runtime.plugins.admin.jvmstatus.monitoring.sample.AbstractSampleManager;
028
029/**
030 * AbstractAlertSampleManager gives you the infrastructure for easily
031 * deploying an {@link AlertSampleManager}.
032 * If the configuration mailBody is i18n, it can include two parameters :
033 * the first one is the current value, the second one is the threshold value
034 */
035public abstract class AbstractAlertSampleManager extends AbstractSampleManager implements AlertSampleManager
036{
037    /** The subject of the mail */
038    protected I18nizableText _subject;
039    /** The body of the mail */
040    protected I18nizableText _body;
041    
042    @Override
043    public void configure(Configuration configuration) throws ConfigurationException
044    {
045        super.configure(configuration);
046        
047        _subject = I18nizableText.parseI18nizableText(configuration.getChild("mailSubject"), "plugin." + _pluginName);
048        _body = I18nizableText.parseI18nizableText(configuration.getChild("mailBody"), "plugin." + _pluginName);
049    }
050    
051    @Override
052    public Map<String, Threshold> getThresholdValues()
053    {
054        if (Config.getInstance() == null)
055        {
056            return null;
057        }
058        
059        Map<String, Threshold> result = new HashMap<>();
060        Map<String, String> configNames = getThresholdConfigNames();
061        Map<String, Operator> operators = getOperators();
062        for (String datasourceName : configNames.keySet())
063        {
064            String configName = configNames.get(datasourceName);
065            Object value = Config.getInstance().getValue(configName);
066            result.put(datasourceName, new Threshold(operators.get(datasourceName), datasourceName, value, _subject, _body));
067        }
068        return result;
069    }
070    
071    /**
072     * Provides the configuration names for each datasource an alert is attached to.
073     * This method must return a map with the same keys as {@link #getOperators()}
074     * @return the configuration names for each datasource an alert is attached to.
075     */
076    protected abstract Map<String, String> getThresholdConfigNames();
077    
078    /**
079     * Provides the kind of operator for triggering the alert for each datasource an alert is attached to.
080     * This method must return a map with the same keys as {@link #getThresholdConfigNames()}
081     * @return the kind of operator for triggering the alert for each datasource an alert is attached to.
082     */
083    protected abstract Map<String, Operator> getOperators();
084}