Configuration impact
---------------------
Following new parameters shall be made available as configuration. Initial or default configuration
-is specified in ``netvirt-qosalert-config.xml``
+is specified in ``netvirt-qosservice-config.xml``
======== ============================= ====================================================
Sl No. configuration Description
<classifier>config</classifier>
</dependency>
<dependency>
- <!-- finalname="etc/opendaylight/datastore/initial/config/netvirt-qosalert-config.xml" -->
+ <!-- finalname="etc/opendaylight/datastore/initial/config/netvirt-qosservice-config.xml" -->
<groupId>${project.groupId}</groupId>
<artifactId>qosservice-impl</artifactId>
<version>${project.version}</version>
<type>xml</type>
<classifier>config</classifier>
</dependency>
+ <dependency>
+ <!-- finalname="etc/org.opendaylight.netvirt.qosservice.cfg" -->
+ <groupId>${project.groupId}</groupId>
+ <artifactId>qosservice-impl</artifactId>
+ <version>${project.version}</version>
+ <type>cfg</type>
+ <classifier>config</classifier>
+ </dependency>
<dependency>
<!-- finalname="etc/opendaylight/datastore/initial/config/netvirt-statistics-config.xml" -->
<groupId>${project.groupId}</groupId>
<classifier>config</classifier>
</dependency>
</dependencies>
-</project>
\ No newline at end of file
+</project>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-neutronvpn-config.xml">
mvn:org.opendaylight.netvirt/neutronvpn-impl/${project.version}/xml/config
</configfile>
- <configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-qosalert-config.xml">
+ <configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-qosservice-config.xml">
mvn:org.opendaylight.netvirt/qosservice-impl/${project.version}/xml/config
</configfile>
+ <configfile finalname="etc/org.opendaylight.netvirt.qosservice.cfg">
+ mvn:org.opendaylight.netvirt/qosservice-impl/${project.version}/cfg/config
+ </configfile>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-statistics-config.xml">
mvn:org.opendaylight.netvirt/statistics-impl/${project.version}/xml/config
</configfile>
<type>xml</type>
<classifier>config</classifier>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>qosservice-impl</artifactId>
+ <version>${project.version}</version>
+ <type>cfg</type>
+ <classifier>config</classifier>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>aclservice-api</artifactId>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-elanmanager-config.xml">mvn:org.opendaylight.netvirt/elanmanager-impl/{{VERSION}}/xml/config</configfile>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-natservice-config.xml">mvn:org.opendaylight.netvirt/natservice-impl/{{VERSION}}/xml/config</configfile>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-neutronvpn-config.xml">mvn:org.opendaylight.netvirt/neutronvpn-impl/{{VERSION}}/xml/config</configfile>
- <configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-qosalert-config.xml">mvn:org.opendaylight.netvirt/qosservice-impl/{{VERSION}}/xml/config</configfile>
+ <configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-qosservice-config.xml">mvn:org.opendaylight.netvirt/qosservice-impl/{{VERSION}}/xml/config</configfile>
+ <configfile finalname="etc/org.opendaylight.netvirt.qosservice.cfg">mvn:org.opendaylight.netvirt/qosservice-impl/{{VERSION}}/cfg/config</configfile>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-statistics-config.xml">mvn:org.opendaylight.netvirt/statistics-impl/{{VERSION}}/xml/config</configfile>
<configfile finalname="etc/opendaylight/datastore/initial/config/netvirt-vpnmanager-config.xml">mvn:org.opendaylight.netvirt/vpnmanager-impl/{{VERSION}}/xml/config</configfile>
</feature>
<artifactId>org.apache.karaf.shell.console</artifactId>
<scope>provided</scope>
</dependency>
-
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.configadmin</artifactId>
+ <version>1.8.14</version>
+ </dependency>
</dependencies>
<configuration>
<artifacts>
<artifact>
- <file>${project.build.directory}/classes/initial/netvirt-qosalert-config.xml</file>
+ <file>${project.build.directory}/classes/initial/netvirt-qosservice-config.xml</file>
<type>xml</type>
<classifier>config</classifier>
</artifact>
+ <artifact>
+ <file>${project.build.directory}/classes/initial/qosservice.cfg</file>
+ <type>cfg</type>
+ <classifier>config</classifier>
+ </artifact>
</artifacts>
</configuration>
</execution>
package org.opendaylight.netvirt.qosservice;
+import java.io.IOException;
import java.math.BigInteger;
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class QosAlertGenerator {
- private static final Logger LOG = LoggerFactory.getLogger(QosAlertGenerator.class);
+ private static ConfigurationAdmin configurationAdmin;
+ private static final Logger LOG = LoggerFactory.getLogger(QosAlertGenerator.class);
+
+ public QosAlertGenerator() {
+ BundleContext bundleContext = FrameworkUtil.getBundle(QosAlertGenerator.class).getBundleContext();
+ configurationAdmin = (ConfigurationAdmin) bundleContext.getService(bundleContext
+ .getServiceReference(ConfigurationAdmin.class.getName()));
+ updateQoSAlertLog4jProperties(getPropertyMap(QosConstants.QOS_ALERT_PROPERTIES_PID));
+ }
- private QosAlertGenerator() {
- // Hide implicit constructor
+ public void update(Map<String, Object> qosAlertProperties) {
+ updateQoSAlertLog4jProperties(qosAlertProperties);
}
public static void raiseAlert(final String qosPolicyName, final String qosPolicyUuid, final String portUuid,
final BigInteger rxDroppedPackets) {
// Log the alert message in a text file using log4j appender qosalertmsg
LOG.debug(QosConstants.alertMsgFormat, qosPolicyName, qosPolicyUuid, portUuid, networkUuid,
- rxPackets, rxDroppedPackets);
+ rxPackets, rxDroppedPackets);
}
+ private static Configuration getConfig(String pid) {
+ Configuration config = null;
+ try {
+ config = configurationAdmin.getConfiguration(pid);
+ } catch (java.io.IOException ioe) {
+ LOG.error("Exception in configuration {}", ioe);
+ }
+ return (config);
+ }
+
+ private static Map<String, Object> getPropertyMap(String pid) {
+ Map<String, Object> propertyMap = null;
+ Configuration configurationInit = getConfig(pid);
+ Dictionary<String, Object> config = configurationInit.getProperties();
+ propertyMap = new HashMap<>(config.size());
+ Enumeration<String> keys = config.keys();
+ while (keys.hasMoreElements()) {
+ String key = keys.nextElement();
+ propertyMap.put(key, config.get(key));
+ }
+ return (propertyMap);
+ }
+
+ private static Map<String, Object> removeNonLog4jProperties(Map<String, Object> qosAlertLog4jProperties) {
+ qosAlertLog4jProperties.remove(QosConstants.FELIX_FILEINSTALL_FILENAME);
+ qosAlertLog4jProperties.remove(QosConstants.SERVICE_PID);
+ return (qosAlertLog4jProperties);
+ }
+
+ private static void updateQoSAlertLog4jProperties(Map<String, Object> qosAlertLog4jProperties) {
+ Map<String, Object> log4jProperties = getPropertyMap(QosConstants.ORG_OPS4J_PAX_LOGGING);
+ Hashtable<String, Object> updateLog4jProperties = new Hashtable<>();
+ updateLog4jProperties.putAll(log4jProperties);
+ updateLog4jProperties.putAll(removeNonLog4jProperties(qosAlertLog4jProperties));
+
+ Configuration log4jConfig = getConfig(QosConstants.ORG_OPS4J_PAX_LOGGING);
+ try {
+ log4jConfig.update(updateLog4jProperties);
+ log4jConfig.update();
+ } catch (IOException ioe) {
+ LOG.error("Exception in configuration {}", ioe);
+ }
+ }
}
public static final int QOS_DEFAULT_FLOW_PRIORITY = 10;
public static String alertMsgFormat = "Packet drop threshold hit for qos policy {} with qos-id {} for port port-{}"
+ " on network network-{} rx_received {} rx_dropped {}";
+ public static final String QOS_ALERT_PROPERTIES_PID = "org.opendaylight.netvirt.qosservice";
+ public static final String ORG_OPS4J_PAX_LOGGING = "org.ops4j.pax.logging";
+ public static final String FELIX_FILEINSTALL_FILENAME = "felix.fileinstall.filename";
+ public static final String SERVICE_PID = "service.pid";
}
--- /dev/null
+log4j.logger.org.opendaylight.netvirt.qosservice.QosAlertGenerator=TRACE, qosalertmsg
+log4j.additivity.org.opendaylight.netvirt.qosservice.QosAlertGenerator=false
+log4j.appender.qosalertmsg=org.apache.log4j.RollingFileAppender
+log4j.appender.qosalertmsg.layout=org.apache.log4j.PatternLayout
+log4j.appender.qosalertmsg.layout.ConversionPattern=%d{ISO8601} %m%n
+log4j.appender.qosalertmsg.file=${karaf.home}/qosalert/qosalert.log
+log4j.appender.qosalertmsg.append=true
+log4j.appender.qosalertmsg.maxFileSize=1MB
+log4j.appender.qosalertmsg.maxBackupIndex=10
<odl:clustered-app-config id="qosalertConfig"
binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.qosalert.config.rev170301.QosalertConfig"
- default-config-file-name="netvirt-qosalert-config.xml"
+ default-config-file-name="netvirt-qosservice-config.xml"
update-strategy="none">
</odl:clustered-app-config>
</command-bundle>
+ <bean id="qosAlertGenerator" class="org.opendaylight.netvirt.qosservice.QosAlertGenerator">
+ <cm:managed-properties persistent-id="org.opendaylight.netvirt.qosservice"
+ update-strategy="component-managed" update-method="update"/>
+ </bean>
+
</blueprint>