File Coverage

blib/lib/Sys/CmdMod/Plugin/Ionice.pm
Criterion Covered Total %
statement 11 13 84.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 16 18 88.8


line stmt bran cond sub pod time code
1             package Sys::CmdMod::Plugin::Ionice;
2             {
3             $Sys::CmdMod::Plugin::Ionice::VERSION = '0.18';
4             }
5             BEGIN {
6 1     1   4118 $Sys::CmdMod::Plugin::Ionice::AUTHORITY = 'cpan:TEX';
7             }
8             # ABSTRACT: CmdMod plugin for ionice
9              
10 1     1   27 use 5.010_000;
  1         3  
  1         39  
11 1     1   5 use mro 'c3';
  1         2  
  1         6  
12 1     1   29 use feature ':5.10';
  1         2  
  1         102  
13              
14 1     1   498 use Moose;
  0            
  0            
15             use namespace::autoclean;
16              
17             # use IO::Handle;
18             # use autodie;
19             # use MooseX::Params::Validate;
20              
21             use Version::Compare;
22              
23             use Sys::Run;
24             use File::Blarf;
25              
26             extends 'Sys::CmdMod::Plugin';
27              
28             has 'class' => (
29             'is' => 'rw',
30             'isa' => 'Int',
31             'default' => 3,
32             );
33              
34             sub _init_priority { return 7; }
35              
36             sub _init_binary {
37             my $self = shift;
38              
39             return $self->_find_binary('ionice');
40             }
41              
42             sub BUILD {
43             my $self = shift;
44              
45             if ( !-x $self->binary() ) {
46             die( 'Could not find executable at ' . $self->binary() );
47             }
48              
49             # check prio = 0-7
50             if ( $self->priority < 0 || $self->priority > 7 ) {
51             die('Invalid priority given. Must be 0-7.');
52             }
53              
54             # check class = 0-3
55             if ( $self->class < 0 || $self->class > 3 ) {
56             die('Invalid class given. Must be 0-3.');
57             }
58              
59             # check kernel
60             my $kernel = $self->_kernel_version();
61             if ( $kernel && Version::Compare::version_compare( $kernel, '2.6.13' ) < 0 ) {
62             die( 'Running Kernel version (' . $kernel . ') too old to possibly support ionice.' );
63             }
64              
65             return 1;
66             }
67              
68             sub _kernel_version {
69             my $proc_version = '/proc/version';
70             if ( -f $proc_version ) {
71             my $kernel_version = File::Blarf::slurp( $proc_version, { Chomp => 1, } );
72             if ( $kernel_version =~ m/^Linux version (\S+) \(/ ) {
73             return $1;
74             }
75             } ## end if ( -f $proc_version )
76              
77             return;
78             }
79              
80             sub cmd {
81             my $self = shift;
82             my $cmd = shift;
83              
84             if ( $self->class() == 1 || $self->class() == 2 ) {
85             return $self->binary() . ' -c' . $self->class() . ' -n' . $self->priority() . q{ } . $cmd;
86             }
87             else {
88             return $self->binary() . ' -c' . $self->class() . q{ } . $cmd;
89             }
90             }
91              
92             no Moose;
93             __PACKAGE__->meta->make_immutable;
94              
95             1;
96              
97             __END__
98              
99             =pod
100              
101             =encoding utf-8
102              
103             =head1 NAME
104              
105             Sys::CmdMod::Plugin::Ionice - CmdMod plugin for ionice
106              
107             =head1 METHODS
108              
109             =head2 BUILD
110              
111             Initialize this module.
112              
113             =head2 cmd
114              
115             Prepend the ionice invocation.
116              
117             =head1 NAME
118              
119             Sys::CmdMod::Plugin::Ionice - ionice support
120              
121             =head1 AUTHOR
122              
123             Dominik Schulz <dominik.schulz@gauner.org>
124              
125             =head1 COPYRIGHT AND LICENSE
126              
127             This software is copyright (c) 2012 by Dominik Schulz.
128              
129             This is free software; you can redistribute it and/or modify it under
130             the same terms as the Perl 5 programming language system itself.
131              
132             =cut