Benjamin Reed | 29 May 22:38 2009

[opennms-devel] WARNING: database volatility in 1.7.x snapshots starting tomorrow -- please help test!!

So I've finished the work on transitioning to liquibase for revisions to
the database.

I believe I've found all of the bugs (both on upgrading, and fresh
install) but it's a rather large change to the way we create our
database schema.  Be forewarned, if you're playing with OpenNMS 1.7.x
snapshots, be prepared to back up your database first before upgrading
to a snapshot of revision 13498 or higher.

That said, I would really appreciate feedback from testers, letting me
know if they ran into any issues after the update.

Thanks!

--

-- 
Benjamin Reed
The OpenNMS Group
http://www.opennms.org/

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
(Continue reading)

Philippe Guillebert | 29 May 10:29 2009
Picon
Picon

[opennms-devel] [PATCH] [RANCID] Fallback to IP when searching for RancidNode

Hi

We've got a little issue with the current Rancid integration : our 
nodeLabels are arbitrary (not ip, not DNS names). So, in our Rancid 
configuration (router.db), we use primary IP addresses as names.

And, with the current SVN HEAD, InventoryService uses nodeLabel and 
supposes it's the name in router.db.

This patches adds a fallback : when the node cannot be found by label, 
it tries to use primaryInterface or the first interface it finds.

It's tested and works for me ;)

I'm puzzled about :
    OnmsIpInterface primaryInterface = node.getPrimaryInterface();

It should give me the primaryInterface, but doesn't, even for nodes 
where there is a 'P' in the column issnmpprimary in the ipinterface table.

Am I getting the primary interface concept right ?

So I borrowed code from another function in RancidProvisioningAdapter ( 
getSuitableIpForRancid() ) and that's why, in the patch, I get all 
interfaces and pick the first. Not very elegant, but it works.

I hope this will be integrated in SVN by our friends the other side of 
the alps :)

Have a nice day
(Continue reading)

Azure | 29 May 05:55 2009
Picon

[opennms-devel] How to get group(s) for login user

Hi All

currently I am testing new jsp page under opennms web site.

In this page, I want to get group belong to login user.

But I am not able to do that until now.

I try the following but not success

private GroupDao m_groupDao;
List<Group> groups = this.m_groupDao.findGroupsForUser(request.getRemoteUser());

Please advise me.

Bgrds

Athena

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel
Alex Bennee | 28 May 19:11 2009

[opennms-devel] [RFC PATCH] Add a node counter to the summary page

Hi,

This is something our customers have requested so I knocked this patch
up to see how easy it would be. I'd be interested in feedback from the
more "service" orientated network managers rather the "device"
orientated  people we seem to be in this field.

I suspect there is better wording for the title headings. This is
against the 1.6 stable series:

>From 685d93654bf67623ab37a66c71a446e7a982f12d Mon Sep 17 00:00:00 2001
From: Alex Bennee <alex <at> bennee.com>
Date: Thu, 28 May 2009 18:02:49 +0100
Subject: [PATCH] Add a node counter to the summary page

Some of our customers are familiar with seeing a summary off broken
nodes. At first glance
of the front page it's hard to tell if 4 disparate services on
different nodes are broken
or one node is down.
---
 .../java/org/opennms/web/category/Category.java    |   67 ++++++++++++++++++--
 .../src/main/webapp/includes/categories-box.jsp    |    7 ++
 2 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/opennms-webapp/src/main/java/org/opennms/web/category/Category.java
b/opennms-webapp/src/main/java/org/opennms/web/category/Category.java
index 7a8704a..81e3a80 100644
--- a/opennms-webapp/src/main/java/org/opennms/web/category/Category.java
+++ b/opennms-webapp/src/main/java/org/opennms/web/category/Category.java
 <at>  <at>  -73,6 +73,16  <at>  <at>  public class Category {
     protected Date m_lastUpdated;

     /**
+     * A cached value of the total number of nodes in a category
+     */
+    protected Long m_nodesCount;
+
+    /**
+     * A cached value of the total number of nodes affected by an outage
+     */
+    protected Long m_nodesAffectedCount;
+
+    /**
      * A cached value of the total number of services on nodes
belonging to this
      * category.
      */
 <at>  <at>  -117,6 +127,9  <at>  <at>  public class Category {
         m_rtcCategory = rtcCategory;
         m_lastUpdated = lastUpdated;

+        m_nodesCount = null;
+        m_nodesAffectedCount = null;
+
         m_serviceCount = null;
         m_serviceDownCount = null;
     }
 <at>  <at>  -175,14 +188,18  <at>  <at>  public class Category {
     public long getServiceCount() {
         if (m_serviceCount == null) {
             if (m_rtcCategory == null) {
+                m_nodesCount = new Long(0);
+                m_nodesAffectedCount = new Long(0);
                 m_serviceCount = new Long(0);
                 m_serviceDownCount = new Long(0);
                 m_servicePercentage = new Double(0);
             } else {
                 long[] counts = getServiceCounts(m_rtcCategory);

-                m_serviceCount = new Long(counts[0]);
-                m_serviceDownCount = new Long(counts[1]);
+                m_nodesCount = new Long(counts[0]);
+                m_nodesAffectedCount = new Long(counts[1]);
+                m_serviceCount = new Long(counts[2]);
+                m_serviceDownCount = new Long(counts[3]);

                 if (m_serviceCount.longValue() == 0) {
                     m_servicePercentage = new Double(100.0);
 <at>  <at>  -196,6 +213,28  <at>  <at>  public class Category {
     }

     /**
+     * Return the number of nodes in the category
+     */
+    public long getNodesCount () {
+        if (m_nodesCount == null) {
+            getServiceCount();
+        }
+
+        return m_nodesCount.longValue();
+    }
+
+    /**
+     * Return the number of nodes that have affected services
+     */
+    public long getNodesAffectedCount () {
+        if (m_nodesAffectedCount == null) {
+            getServiceCount();
+        }
+
+        return m_nodesAffectedCount.longValue();
+    }
+
+    /**
      * Return the number of services that are currently down with
this category.
      */
     public long getServiceDownCount() {
 <at>  <at>  -257,6 +296,15  <at>  <at>  public class Category {
     }

     /** Returns the outage text for this category ("X of Y" nodes down). */
+    public String getNodeOutageText() {
+        if (m_lastUpdated == null) {
+            return "Calculating...";
+        } else {
+            return getNodesAffectedCount() + " of " + getNodesCount();
+        }
+    }
+
+    /** Returns the outage text for this category ("X of Y" services down). */
     public String getOutageText() {
         if (m_lastUpdated == null) {
             return "Calculating...";
 <at>  <at>  -308,6 +356,9  <at>  <at>  public class Category {
             throw new IllegalArgumentException("Cannot take null parameters.");
         }

+        long nodes = 0;
+        long affectedNodes = 0;
+
         long count = 0;
         long downCount = 0;

 <at>  <at>  -315,11 +366,17  <at>  <at>  public class Category {

         while (nodeEnum.hasMoreElements()) {
             org.opennms.netmgt.xml.rtc.Node node =
(org.opennms.netmgt.xml.rtc.Node) nodeEnum.nextElement();
-
+            long affectedServices = node.getNodesvcdowncount();
+
+            nodes += 1;
             count += node.getNodesvccount();
-            downCount += node.getNodesvcdowncount();
+
+            if (affectedServices > 0) {
+                affectedNodes += 1;
+                downCount += affectedServices;
+            }
         }

-        return new long[] { count, downCount };
+        return new long[] { nodes, affectedNodes, count, downCount };
     }
 }
diff --git a/opennms-webapp/src/main/webapp/includes/categories-box.jsp
b/opennms-webapp/src/main/webapp/includes/categories-box.jsp
index 13416c7..9347ddd 100644
--- a/opennms-webapp/src/main/webapp/includes/categories-box.jsp
+++ b/opennms-webapp/src/main/webapp/includes/categories-box.jsp
 <at>  <at>  -95,6 +95,7  <at>  <at> 
 	<thead>
 		<tr>
 			<th><%= sectionName %></th>
+			<th align="right">Nodes</th>
 			<th align="right">Outages</th>
 			<th align="right">Availability</th>
 		</tr>
 <at>  <at>  -107,6 +108,7  <at>  <at> 
 		String categoryName = category.getName();
 %>
 	<tr class="CellStatus">
+
 		<td>
           <% if (category.getLastUpdated() != null) { %>
 		    <a href="<%= response.encodeURL("rtc/category.jsp?category=" +
Util.encode(categoryName)) %>"
 <at>  <at>  -117,6 +119,11  <at>  <at> 
             <%= categoryName %>
           <% } %>
 		</td>
+                <td class="<%= (opennmsDisconnect ? "Indeterminate" :
category.getOutageClass()) %>"
+		    align="right"
+		    title="Updated: <%= category.getLastUpdated() %>">
+		   <%= category.getNodeOutageText() %>
+		</td>
 		<td class="<%= (opennmsDisconnect ? "Indeterminate" :
category.getOutageClass()) %>"
 	        align="right"
 		    title="Updated: <%= category.getLastUpdated() %>"><%=
category.getOutageText() %>
-- 
1.6.0.2.95.g72d40

-- 
Alex, homepage: http://www.bennee.com/~alex/
CV: http://www.bennee.com/~alex/cv.php

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT 
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp as they present alongside digital heavyweights like Barbarian 
Group, R/GA, & Big Spaceship. http://p.sf.net/sfu/creativitycat-com 
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Robert Drake | 22 May 20:40 2009

[opennms-devel] Possible problem with snmpinterface

I think I found a problem with snmpinterface thats caused by the
index snmpinterface_nodeid_ifindex_unique_idx (nodeid,snmpifindex)

The problem being that interfaces with a secondary IP address have the
same ifIndex.

Steps to reproduce:

On a linux server running snmp:

ifconfig eth0 10.1.1.5 netmask 255.255.255.0
ifconfig eth0:1 10.1.1.6 netmask 255.255.255.0

now add the subinterface using Admin|Add Interface.

If you're tailing capsd.log you'll see:

org.postgresql.util.PSQLException: ERROR: duplicate key value violates
unique constraint "snmpinterface_nodeid_ifindex_unique_idx"

Wait a few, then go look at the node thats been created.

What you should see is the 10.1.1.6 IP listed under "IP Interfaces" and
the 10.1.1.5 IP listed under "Physical Interfaces"

Double clicking the physical interface shows an exception.

You'll also notice there is no "Resource Graphs" button, so the node is
pretty broked.

Now, if you add the real interface like a good person would, then
everything gets found fine and happy.  So the easy answer is "Don't
do that." but, we have a couple of situations where adding the physical
address isn't possible (the biggest one being a cluster where we want to
monitor the cluster-ip and not the physical IP of the box)

It's also possible that if you're running discovery then it'd be luck of
the draw as to which IP gets checked.

Thanks,
Robert

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com 
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Robert Drake | 20 May 02:12 2009

[opennms-devel] NTP (Bug 891)

Sometimes you don't know you want something until it's gone.

I was looking at this bug and thinking it might be nice to watch our
timeservers for drift and things, since time is frequently depended on
for everything but rarely verified (by me at least).

It looks like NtpPlugin has been removed from capsd and the only
reference to it now is in poller-config.properties.

Is it still possible to turn this on?  I'd love if it worked like
StrafePing where I tell it where I want to monitor and it only looks
there.  Or just leave it out of the "Foreign Source" list so it's not
discovered, but only polled if someone adds it directly to a nodes
services.

I guess the alternative is that since we're using FreeBSD for our
timeservers I can just write some kind of wrapper in net-snmp.  (but if
thats the case, you might want to excise the rest of NtpPlugin and close
the related bug(s))

Notes (for me):

http://www.satsignal.eu/mrtg/daily_ntp.html site with notes on
using MRTG for it (bleh)
http://www.oidview.com/mibs/9/CISCO-NTP-MIB.html
http://tools.ietf.org/html/draft-ietf-ntp-ntpv4-mib-05

Cisco has a MIB so I may add it to our routers and see what happens.  It
looks like the ntpv4-mib draft expired two months ago with no revision
or final rfc (so doing SNMP in a standards compliant way is out)

Thanks,
Robert

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Kevin Roberts | 19 May 20:44 2009

[opennms-devel] 1.7.4-0.13432.snapshot

Is there a problem with 1.7.4-0.13432.snapshot? (as it is reporting lot’s of down ICNP, HTTP, SMNP  etc and they are not down.)

 

Kevin

 


Confidentiality Notice: This page and any accompanying documents contain information that is confidential, privileged, or exempt from disclosure under applicable law and is intended for the exclusive use of the addressee. This information is private and protected by law. If you are not the intended recipient, you are hereby notified that any disclosure, copying, distribution, or use of the contents of this information in any manner is strictly prohibited.
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel
Alejandro Galue | 19 May 14:46 2009
Picon

[opennms-devel] Thresholds Processing Features

Hello All, Today I merged my changes into trunk from branch feature-new-threshold-visitor. This changes solve Bug 3146 and adds a new feature for Pollerd in-line thresholding processing. About the Bug 3146... The old implementation couldn't maintain threshold's states across configuration reloading. The new implementation is more intelligent about that and can track: a) If the configuration change is not related to currently triggered thresholds, just simple keep state. b) If the configuration changes is related to currently triggered thresholds, send a special rearm (with NaN as current value, and a new event parameter called reason with value: 'Configuration has been changed'), in order to keep automations working fine. After that, new configuration is merged to old one and new thresholds will use the new configuration correctly. c) If the configuration replaces currently triggered thresholds (for example, you change a high threshold for a low threshold), the procedure is similar to b). About the new thresholding processor on Pollerd. Now, you can add a special parameter called thresholding-enabled (like you usually add it on collectd-configuration.xml) on a service definition in poller-configuration.xml to enable thresholds processing; for example:

<service name="ICMP" interval="300000" user-defined="false" status="on">
  <parameter key="retry" value="2" />
  <parameter key="timeout" value="3000" />
  <parameter key="rrd-repository" value="/opt/opennms/share/rrd/response" />
  <parameter key="rrd-base-name" value="icmp" />
  <parameter key="ds-name" value="icmp" />
  <parameter key="thresholding-enabled" value="true" />
</service>

and then configure thresholds....

thresd-configuration.xml:

<package name="icmp-latency">
  <filter>IPADDR != '0.0.0.0'</filter>
  <include-range begin="1.1.1.1" end="254.254.254.254"/>
  <service name="ICMP" interval="300000" user-defined="false" status="on">
    <parameter key="thresholding-group" value="icmp-latency"/>
  </service>
</package>

thresholds.xml:

<group name="icmp-latency" rrdRepository="/opt/opennms/share/rrd/response/">
  <threshold type="high" ds-type="if" value="200.0" rearm="100.0" trigger="1" ds-name="icmp"/>
</group>

Please test it and let me know if anyone found something wrong.

Regards,
Alejandro.

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel
jonathan sartin | 18 May 22:24 2009

[opennms-devel] event.xsd - to extend, or not to extend

Chaps,

I'm working on events to send to a new daemon. I have a number of  
parameters to add to the event. They will be specific to the daemon  
and will be a variety of different types (Integer, String, Date etc.).

Should I put them into the existing Parms (which seem kind of SNMP  
specific), or should I extend add a new element to the schema to deal  
with them?

Cheers ... J

------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Alex Bennee | 11 May 14:53 2009

[opennms-devel] Problems building OpenNMS Debian Packages

Hi,

This is odd behaviour. I'm having trouble building packages for the
current stable branch of OpenNMS. Building via the command line with:

./build.sh install assembly:directory-inline

Works fine. However if I try and build a Debian package with the usual:

dpkg-buildpackage -rfakeroot

It bombs out quite early on:

[INFO] Compiling 3 source files to
/export/csrc/opennms/pkgbuild/opennms_pkgbuild.git/opennms-install/target/test-classes
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
Failure executing javac, but could not parse the error:

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:637)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at org.codehaus.plexus.compiler.javac.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:56)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)
        at com.sun.tools.javac.main.JavaCompiler.<init>(JavaCompiler.java:330)
        at com.sun.tools.javac.main.JavaCompiler.instance(JavaCompiler.java:86)
        at com.sun.tools.javac.main.Main.compile(Main.java:367)
        at com.sun.tools.javac.main.Main.compile(Main.java:306)
        at com.sun.tools.javac.main.Main.compile(Main.java:297)
        at com.sun.tools.javac.Main.compile(Main.java:100)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420)
        at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141)
        at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493)
        at org.apache.maven.plugin.TestCompilerMojo.execute(TestCompilerMojo.java:102)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:333)

Which doesn't make much sense given the final report:

[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 minute 25 seconds
[INFO] Finished at: Mon May 11 13:40:32 BST 2009
[INFO] Final Memory: 94M/493M
[INFO] ------------------------------------------------------------------------
make: *** [debian/stamp-build] Error 1
dpkg-buildpackage: failure: debian/rules build gave error exit status 2

My build machine certainly didn't seem as though it was pushed for
memory. Has anyone seen this behaviour before?

-- 
Alex, homepage: http://www.bennee.com/~alex/
CV: http://www.bennee.com/~alex/cv.php

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

syed khurram | 10 May 13:06 2009
Picon

[opennms-devel] customizing availability report

hi,

Can we customize the look and feel of PDF availability reports which will be emailed to the admin.
plz help.

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Gmane