[Nut-upsdev] MGE NMC and NutShutdownModule (and other stuff)
Marco Chiappero
marco at absence.it
Wed Oct 28 08:57:03 UTC 2009
Arjen de Korte ha scritto:
>> No. This would be a problem when using the UDP protocol, that I didn't
>> implemented, where there is a single socket reading broadcast messages
>> sent by the UPSes. In such case we would need the driver approach (but
>> that breaks the single_UPS--single_driver_instance design [1]) or the
>> new deamon approach (that shall take care about talking to the NMC
>> directly). Otherwise this is false and you can run every netxml-ups
>> instances you want (or run UDP in a single UPS scenario only).
>
> This is what I misunderstood.
Ok, never mind, let's forget about previous messages :)
> I though the driver would have to open a
> socket for listening and wait for a connection *from* the NMC (like the
> NSM client that is provided by Eaton),
Mmm, the Eaton software uses two lighttpd instances, one for configuring
the client via web pages, the other for reading UDP messages I suppose
(but netstat says it's a TCP socket). The default setting is to try to
use UDP, which is more efficient and allows more UPSes to be managed by
the NMC, and switch to TCP on failure. User can change this behavior and
go through the TCP protocol only. However, as far as I can see, even
when using TCP through the mgeDAE (Daemon Acquisition Engine), you have
lighttpd bound to the 4679-4680 ports. If the http approach is a good
way to support a uniform interface on different systems it's not optimal
for server machines. You have to configure the client connecting to the
configuration port (so the server can not be bound to the loopback
address), you can then disable the http server for example modifying the
init script (but disabling UDP I suppose), but it's an hack. On the
other side having to care about a non productive http server it's
annoying, and this is one of the reasons that make me prefer to go with
NUT. Moreover, NUT quite widespread and well know to the sysadmins, so I
can be convenient for them to use a software they already know. As I
have a small setup I'm using the TCP protocol and the good side effect
it is that I do not have to allow incoming connections, which can be a
positive aspect (while the downside is the limited power of the NSM.
Maybe in the future this will be a much smaller issue?). As I said I own
an old card, so I can tell the driver to generate random hostnames and
make some stress test, even though it's not much a NUT related problem.
> but apparently this mechanism
> isn't used and instead it opens a connection *to* the NMC.
In short the TCP protocol I now explain a bit. The driver reads the
product page. If it is going to using the centralized settings first
retrieves them from another page. Then uses the subscription page for
offering its settings (the previously read or the local ones) and
receive a key number, at this point it starts the TCP communication and
starts waiting for alarm messages, after providing the key number as
authentication. That's all. Alarm messages are host specific, so it's a
source of information with higher "priority" and should override the
same values read from the generic web page.
> In that case,
> you would indeed be able to run multiple NSM enabled drivers in
> parallel. The only objection that remains then is that putting this in
> the netxml-ups driver is probably not a good idea. It would be quite a
> burden on the little micro controller in the NMC 66102, since it would
> also require parsing the full XML data for each instance.
Yes, if we do care about detailed info. The summary page can be enough
for that, but at this point we should introduce changes in the
netxml-driver and a new configuration key (such as "extended = true")
which is not good. Nonetheless there's no way out if we want many
variables, we have to read a "lot" of data from every single UPS
involved and stress the NMC, even though UDP can help. Maybe we can use
the summary page, by default, when the management is enabled, or use
different poll intervals for management and data... If I'm not wrong the
Eaton software polls the summary page every 60 seconds and looks for new
alarms every 10 seconds.
> If you'd make
> this NSM driver a separate one however, I'd be all for it.
Sorry, I don't understand this last sentence, what you mean?
> A separate (new) driver would also deal with the case where you'd define
> a meta UPS (like the globalups example you wrote about earlier) where
> neither of two (or more) individual UPS devices that would be part of
> this meta UPS could be the sole source of information like voltages,
> currents and battery charge.
The "meta UPS" can't expose those values, just driver parameters, total
remaining capacity, global load, global status.. For detailed info, if
needed, the netxml-ups driver have to be used as well. Let me explain
the reasons behind this idea. After using the subdriver approach I
thought that, to make NUT useful for many different NMC owners, I should
provide the same functionality and almost the same configuration
settings. So, to keep things easy for the user I thought to use the same
Eaton NSM logic in a driver and keep upsmon configuration at minimum
implementing all the different redundant schema supported by the Eaton
software directly in the driver. Now, I do not have multiple UPS and I'm
not experienced with complex upsmon configuration, so I can't say
accurately whether those redundant configuration (look back at the
images I linked) can be supported natively by NUT. If so it can be
avoided dealing with them in the driver, so we can discard this idea and
use your last one for example. Otherwise we can chose to ignore the UDP
protocol. There is also the new daemon solution (certainly a clean one,
but it's too manufacturer specific for a general purpose software like
NUT). All possible solutions, but it's a bit difficult to say what is
best, need some help :)
> In such case, you'd only be able to tell
> whether the clients that connect to that meta UPS would need to shutdown
> or not.
Yes. That's how the Eaton NSM works. Probably people are not really
interested in managing the single UPSes directly, so should be fine.
Otherwise the netxml-ups can still be used.
> All remaining info (for logging purposes) would need to come
> from drivers that connect to a single UPS device (however, that probably
> wouldn't be relevant to the clients that connect to the meta UPS anyway).
Exactly.
> Sorry for being such a PITA, but I prefer to get a clear picture on what
> the pros and cons are before people invest time in writing something,
> only to find out along the way that they have to start over again later.
I know that the main target for the netxml-ups driver are very large
setups and the UDP protocol can be useful there, however there are
certainly environment where the capacity/functionality provided by the
subdriver solution are fine. It's a smart way, it's easy to configure,
small code, but no UDP (I don't know exactly about redundant support).
The Eaton clone driver it's more complex but powerful, configuration
still quite easy. The mged solution sounds like writing a different
program, not much related with NUT. The solution you proposed it's
difficult from the configuration standpoint but could be fine. Knowing
how the Eaton NSM works can help a bit, so, please, have again a look at
the images at least.
The subdriver solution it's ok for my own setup, but if we are able to
find a good approach/compromise the NSM inclusion can maybe be useful
for other people too. It wouldn't be bad, but it's otherwise fine if we
can't.
Regards,
Marco
More information about the Nut-upsdev
mailing list