Guys, Shall I go ahead with this or not? I need to be working on this for our product this week and I'd really like to contribute to James.
Steve > -----Original Message----- > From: Steve Short > Sent: Friday, December 05, 2003 4:26 PM > To: James Developers List > Subject: Monitoring in James (was Monitoring) > > > > We could do it this way. > > The Monitor service is effectively a registry of name to > metrics object mappings, so it provides register() and > lookup() methods to set and retrieve these mappings. This > can be be done using JNDI. The naming scheme provides an > implied hierarchy. It does not know or do anything about > aggregating metric values. Eventually we could provide > several implementations of the service one for JMX, one for > SNMP. Or one implentation with multiple adaptors (SNMP, > AgentX) - kind of like way JMX has HTTP and RMI adaptors. > > The monitored services are responsible for creating and > registering metrics sets, they are also responsible for > setting up the aggregation rules using event listeners using > information obtained from the config file. Something like this: > > <monitor> > <name>metrics/mta/protocols/SMTP</name> > <listeners> > <listener > type="MonitorMetrics">metrics/mta/protocols</aggregate> > <listener > type="MonitorMtaMetrics">metrics/mta/</aggregate> > </aggregations> > </monitor> > > We could drop the type if we give top level MTA metrics the > full set of group metrics and simply ignore the ones that > aren't used or relevant. Protocol specific adaptors such as > SNMP would be responsible for ignoring unwanted attributes. > > Would result in initialization code equivalent to: > > MonitorMetrics mtaMetrics = > (MonitorMtaMetrics)monitor.lookup("metrics/mta"); > MonitorMetrics protocolMetrics = > (MonitorMetrics)monitor.lookup("metrics/mta/protocols"); > > MonitorMetrics metrics = (MonitorMetrics)new > MonitorMetricsSet(); > > metrics.addListener(protocolMetrics); > metrics.addListener(mtaMetrics) > > monitor.register("metrics/mta/protocols/SMTP", metrics); > > Actual metric updates would be done using methods such as: > > metrics.addMessageReceived(long deltaCount, long > deltaSize, long deltaRecipients); > metrics.addMessageStored(long deltaCount, long deltaSize, > long deltaRecipients); > metrics.subtractMessageStored(long deltaCount, long > deltaSize, long deltaRecipients); > metrics.addMessageTransmitted(long deltaCount, long > deltaSize, long deltaRecipients); > metrics.addMessageConversion(long deltaCount); > metrics.addLoopDetected(long deltaCount); > > > > This makes the monitor service much simpler, but it puts a > lot more burden on the individual components to set up the > hierachy associations and the aggregation using listeners. > It also makes mistakes much more likely because the full name > strings have to be specified multiple times in the config > file and have match, but I guess good error detection and > reporting would alleviate this somewhat. There's also the > issue of how and when to create group entries such as > "Protocols" that don't have a direct implementation point in > James - this could be done automatically at register() time > but means that typos will result in new entries being created > instead of useful error messages being output. > > More thoughts? > > Steve > > > > -----Original Message----- > > From: Noel J. Bergman [mailto:[EMAIL PROTECTED] > > Sent: Friday, December 05, 2003 10:13 AM > > To: James Developers List > > Subject: RE: Monitoring > > > > > > > The Monitor service would be exposed via JMX (automatically > > thanks to > > > Phoenix and hopefully Merlin). > > > > > The monitor service configuration would allow declaration > of groups > > > and act as a factory for other components that wish to be > monitored. > > > > My suggestion would be to use JNDI for this purpose, and to > > have a JNDI context containing the metrics. > > > > ../metrics/protocols/SMTP/.. > > > > An SNMP service would expose an SNMP protocol view of the > > information in the metrics context. A component would get > > its metrics context and interact with the beans that we'll > > probably store there. So long as we have a suitably common > > interface, the rest is automagic. > > > > --- Noel > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]