.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "AnyEvent::Processor 3pm" .TH AnyEvent::Processor 3pm "2015-11-30" "perl v5.20.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" AnyEvent::Processor \- Base class to define an event\-driven (AnyEvent) task that could periodically be interrupted by a watcher .SH "VERSION" .IX Header "VERSION" version 0.006 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& package FridgeMonitoring; \& \& use Moose; \& extends \*(AqAnyEvent::Processor\*(Aq; \& use TemperatureSensor; \& \& has sensors => (is => \*(Aqrw\*(Aq, isa => \*(AqArrayRef[TemperatureSensor]\*(Aq); \& has min => (is => \*(Aqrw\*(Aq, isa => \*(AqInt\*(Aq, default => \*(Aq10\*(Aq); \& has max => (is => \*(Aqrw\*(Aq, isa => \*(AqInt\*(Aq, default => \*(Aq20\*(Aq); \& \& \& sub process { \& my $self = shift; \& \& my @failed; \& for my $sensor ( @{$self\->sensors} ) { \& next if $self\->sensor\->temperature >= $self\->min && \& $self\->sensor\->temperature <= $self\->max; \& push @failed, $sensor; \& } \& if ( @failed ) { \& # Send an email to someone with the list of failed fridges \& } \& } \& \& sub process_message { \& my $self = shift; \& say "[", $self\->count, "] Fridges testing"; \& } .Ve .PP package Main; .PP use FridgeMonitoring; .PP my \f(CW$processor\fR = FridgeMonitoring\->new( sensors => # Get a list of fridge sensors from somewhere min => 0, max => 40, ); \&\f(CW$processor\fR\->\fIrun()\fR; .SH "DESCRIPTION" .IX Header "DESCRIPTION" A processor task based on this class process anything that can be divided into processing clusters. Each cluster is processed one by one by calling the \&\fIprocess()\fR method. A count is incremented at the end of each cluster. By default, a AnyEvent::Processor::Watcher is associated with the class, interrupting the processing each second for calling \f(CW\*(C`process_message\*(C'\fR. .SH "ATTRIBUTES" .IX Header "ATTRIBUTES" .SS "verbose" .IX Subsection "verbose" Verbose mode. In this mode an AnyEvent::Processor::Watcher is automatically created, with a 1s timeout, and action directly sent to this class. You can create your own watcher subclassing AnyEvent::Processor::Watcher. .SS "watcher" .IX Subsection "watcher" An AnyEvent::Processor::Watcher. .SS "count" .IX Subsection "count" Number of items which have been processed. .SS "blocking" .IX Subsection "blocking" Is it a blocking task (not a task). False by default. .SH "METHODS" .IX Header "METHODS" .SS "run" .IX Subsection "run" Run the process. .SS "start_process" .IX Subsection "start_process" Something to do at beginning of the process. .SS "start_message" .IX Subsection "start_message" Something to say about the process. Called by default watcher when verbose mode is enabled. By default, just send to \s-1STDOUT \s0'Start process...'. Your class can display another message, or do something else, like sending an email, or a notification to a monitoring system like Nagios. .SS "process" .IX Subsection "process" Process something and increment count. This method has to be surclassed by you class if you want to do someting else than incrementing the \f(CW\*(C`count\*(C'\fR attribute. .SS "process_message" .IX Subsection "process_message" Say something about the process. Called by default watcher (verbose mode) each 1s. By default, just display the \f(CW\*(C`count\*(C'\fR value. Your processor can display something else than just the number of processing clusters already processed. If your processor monitor the temperature of your fridge, you can display it... .SS "end_process" .IX Subsection "end_process" Do something at the end of the process. .SS "end_message" .IX Subsection "end_message" Say something at the end of the process. Called by default watcher. .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "\(bu" 4 AnyEvent::Processor::Converion .IP "\(bu" 4 AnyEvent::Processor::Watcher .SH "AUTHOR" .IX Header "AUTHOR" Fre\*'de\*'ric Demians .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is Copyright (c) 2015 by Fre\*'deric Demians. .PP This is free software, licensed under: .PP .Vb 1 \& The GNU General Public License, Version 3, June 2007 .Ve