Changeset 43 for trunk


Ignore:
Timestamp:
11/22/05 17:39:56 (19 years ago)
Author:
thauvin
Message:
Location:
trunk/soft/ObsData
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/soft/ObsData/ObsData.pm

    • Property cvs2svn:cvs-rev changed from 1.8 to 1.9
    r33 r43  
    66use warnings; 
    77use Config::IniFiles; 
     8use DBD::SQLite; 
     9 
     10my @loglevel = ( 
     11    'DEBUG', 
     12    'INFO', 
     13    'RESULT', 
     14    'WARNING', 
     15    'ERROR', 
     16    'FATAL', 
     17); 
    818 
    919our $VERSION = 0.01; 
     
    2838 
    2939sub new { 
    30     my ($class, $configfile) = @_; 
     40    my ($class, $configfile, %options) = @_; 
    3141    my $obsdata = { 
    3242        config => new Config::IniFiles( 
     
    3545            -allowcontinue => 1 
    3646        ), 
     47        verbose => 1, 
    3748    }; 
    38      
     49 
    3950    if ($configfile) { 
    4051        (-f $configfile && -r _) or return undef; 
     
    4354    $obsdata->{config} or return undef; 
    4455 
     56    $obsdata->{dir} = $options{dir} || $obsdata->{config}->val('global', 'dir'); 
     57 
    4558    bless($obsdata, $class); 
    4659} 
     60 
     61sub DESTROY { 
     62    my ($self) = @_; 
     63 
     64    if ($self->{loghandle}) { 
     65        close($self->{loghandle}); 
     66        $self->{loghandle} = undef; 
     67    } 
     68     
     69} 
     70 
     71sub load { 
     72    my ($self) = @_; 
     73 
     74    if (!open($self->{loghandle}, "> $self->{dir}/logs/obsdata.log")) { 
     75        $self->loging(5, "Can't open log file %s, exiting", "$self->{dir}/logs/obsdata.log"); 
     76        return 0; 
     77    } 
     78     
     79    return 1; 
     80} 
     81 
     82sub loging { 
     83    my ($self, $level, $fmt, @val) = @_; 
     84    my $msg = sprintf($fmt, @val); 
     85    my $logh = $self->{loghandle} || \*STDERR; 
     86    if($level >= 0 && $level >= $self->{verbose}) { 
     87        if ($self->{logcallback}) { 
     88            $self->{logcallback}->($level, $msg); 
     89        } 
     90        print $logh "$msg\n"; 
     91    } 
     92    $msg 
     93} 
     94 
     95sub init_repository { 
     96    my ($dir) = @_; 
     97 
     98    if (!-d $dir) { 
     99        mkdir $dir or return 0; 
     100    } 
     101 
     102    if (!-d "$dir/logs") { 
     103        mkdir "$dir/logs" or return 0; 
     104    }  
     105 
     106    my $db = DBI->connect("dbi:SQLite:dbname=$dir/obsdata.db","","", 
     107        { RaiseError => 1, AutoCommit => 1} 
     108    ) or return 0; 
     109 
     110    my $odr = ObsData->new(undef, dir => $dir); 
     111    $odr->load or return 0; 
     112    $odr->loging(1, "Repository succefully created in %s", $dir); 
     113 
     114    1; 
     115} 
     116 
    47117 
    48118=head2 checkconfig() 
  • trunk/soft/ObsData/ObsData/Repository.pm

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r31 r43  
    66use warnings; 
    77use ObsData; 
    8 use DBD::SQLite; 
    98 
    109our @ISA = qw(ObsData); 
    11  
    12 my @loglevel = ( 
    13     'DEBUG', 
    14     'INFO', 
    15     'RESULT', 
    16     'WARNING', 
    17     'ERROR', 
    18     'FATAL', 
    19 ); 
    2010 
    2111=head1 METHODS 
     
    2313=head2 new 
    2414 
    25 Parameters list: 
    26  
    27 =item configfile 
    28  
    29 The configuration file to use 
    30  
    31 =item sublog 
    32  
    33 Coderef to external loging function 
    34  
    35 =item subloglevel 
    36  
    37 Minimum log level to call sublog, default is 1 
    38  
    39 =item minloglevel 
    40  
    41 Minimum loglevel for internal logging 
    42  
    43 =item dir 
    44  
    45 The directory where internal data are put 
    46  
    4715=cut 
    4816 
    4917sub new { 
    50     my ($class, %config) = @_; 
     18    my ($class, $obsdata) = @_; 
    5119 
    52     my $odr = $class->SUPER::new($config{configfile}) or return undef; 
    53  
    54     $odr->{sublog} = $config{sublog}; 
    55     $odr->{subloglevel} = defined($config{subloglevel}) ? $config{subloglevel} : 1; 
    56     $odr->{minloglevel} = defined($config{minloglevel}) ? $config{minloglevel} : 1; 
    57  
    58     if(!($config{dir} && -d $config{dir})) { 
    59         return undef; 
    60     } 
    61  
    62     open($odr->{loghandle}, "> $config{dir}/logs/obsdata.log") or return undef;  
     20    $obsdata or return undef; 
    6321     
    64     bless($odr, $class); 
    65 } 
    66  
    67 =head2 logmsg 
    68  
    69 Add a message to log stack 
    70  
    71 Parameters list: 
    72  
    73 =item loglevel  
    74  
    75 The log level of message (num or text) 
    76  
    77 =item info 
    78  
    79 hash ref to additionnal info 
    80  
    81 =item message ... 
    82  
    83 printf like args 
    84  
    85 =cut 
    86  
    87 sub logmsg { 
    88     my ($self, $level, $info, $pf, @pfa) = @_; 
    89     my $textlevel = $level =~ /^\d+$/ ? $loglevel[$level] : $level; 
    90     my $nlevel = logleveln($textlevel); 
    91      
    92     my @call = caller; 
    93      
    94     $textlevel ||= ""; 
    95     if (!defined($nlevel)) { 
    96         $textlevel = 'INFO'; 
    97         $nlevel = logleveln($textlevel); 
    98         $self->logmsg('ERROR', undef, 
    99            'Invalid use of loglevel "%s" at %s line %d, unsing %s"', 
    100            $level || "", $call[1], $call[2], $textlevel); 
    101     } 
    102  
    103     if ($self->{minloglevel} <= $nlevel) { 
    104        my $h = $self->{loghandle}; 
    105        print $h "[$textlevel]: " . sprintf($pf, @pfa) . "\n"; 
    106     } 
    107  
    108     if ($self->{sublog} && $self->{subloglevel} <= $nlevel) { 
    109        $self->{sublog}->($textlevel, $info, sprintf($pf, @pfa)); 
    110     } 
    111  
    112 } 
    113  
    114 sub logleveln { 
    115     my ($t) = @_; 
    116     my $i = 0; 
    117     foreach (@loglevel) { 
    118         return $i if ($t eq $_); 
    119         $i++ 
    120     } 
    121     return undef; 
    122 } 
    123  
    124 sub init_repository { 
    125     my ($dir) = @_; 
    126  
    127     if (!-d $dir) { 
    128         mkdir $dir or return 0; 
    129     } 
    130  
    131     if (!-d "$dir/logs") { 
    132         mkdir "$dir/logs" or return 0; 
    133     }  
    134  
    135     my $db = DBI->connect("dbi:SQLite:dbname=$dir/obsdata.db","","", 
    136         { RaiseError => 1, AutoCommit => 1} 
    137     ) or return 0; 
    138  
    139     my $odr = ObsData::Repository->new(dir => $dir); 
    140     $odr->logmsg('INFO', undef, "Repository succefully created in %s", $dir); 
    141  
    142     1; 
     22    bless($obsdata, $class); 
    14323} 
    14424 
  • trunk/soft/ObsData/t/O-01.t

    • Property cvs2svn:cvs-rev changed from 1.3 to 1.4
    r25 r43  
    11# $Id$ 
    22 
    3 use Test::More tests => 4; 
     3use Test::More tests => 5; 
    44 
    55use_ok('ObsData'); 
     6 
     7can_ok('ObsData', qw(init_repository)); 
    68 
    79can_ok('ObsData', qw(list_obs list_obsdatadir list_typedatadir get_datadir getvalue is_obs)); 
  • trunk/soft/ObsData/t/O-02.t

    • Property cvs2svn:cvs-rev changed from 1.4 to 1.5
    r33 r43  
    11# $Id$ 
    22 
    3 use Test::More tests => 12; 
     3use Test::More tests => 15; 
     4use File::Temp qw(tempdir); 
    45 
    56use_ok('ObsData'); 
    67 
    7 ok(my $o = ObsData->new('testdata/obsdata-conftest'), "Can create object"); 
     8my $td = tempdir; 
     9ok(ObsData::init_repository($td), "Can initialize repos data"); 
     10ok(-f "$td/obsdata.db", "db is really create"); 
     11ok(-d "$td/logs", "log directory exists"); 
     12 
     13ok(my $o = ObsData->new('testdata/obsdata-conftest', dir => $td), "Can create object"); 
    814ok($o->is_obs('ohp'), "Isobs works"); 
    915ok(!$o->is_obs('ozone'), "Isobs works"); 
     
    2430ok(eq_set([ $o->list_datatype ], [ 'oxygene', 'ozone' ]), "can get data type"); 
    2531print STDERR join(" ", $o->list_datatype); 
     32 
     33system("rm -fr $td");  
  • trunk/soft/ObsData/t/OR-01.t

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r28 r43  
    11# $Id$ 
    22 
    3 use Test::More tests => 4; 
     3use Test::More tests => 2; 
    44 
    55use_ok('ObsData::Repository'); 
    66 
    7 can_ok('ObsData::Repository', qw(list_obs list_obsdatadir list_typedatadir get_datadir getvalue is_obs)); 
    8 can_ok('ObsData::Repository', qw(init_repository)); 
    9  
    107ok(!ObsData::Repository->new(), "Return an error on bad file"); 
  • trunk/soft/ObsData/t/OR-02.t

    • Property cvs2svn:cvs-rev changed from 1.2 to 1.3
    r31 r43  
    1  
    21# $Id$ 
    32 
    4 use Test::More tests => 6; 
     3use Test::More tests => 1; 
    54use File::Temp qw(tempdir); 
    65use ObsData::Repository; 
    76 
    8 { 
    9 my $td = tempdir; 
    10 ok(ObsData::Repository::init_repository($td), "Can initialize repos data"); 
    11 ok(-f "$td/obsdata.db", "db is really create"); 
    12 ok(-d "$td/logs", "log directory exists"); 
     7ok(1, "Dummy test to keep file into cvs"); 
    138 
    14 ok(ObsData::Repository->new(configfile => 'testdata/obsdata-conftest', dir => $td), "Can create object"); 
    15  
    16 my $odr = ObsData::Repository->new( 
    17     configfile => 'testdata/obsdata-conftest', dir => $td, 
    18     sublog => sub {  
    19         ok($_[0] eq "INFO", "Log Callback give good loglevel"); 
    20         ok($_[2] eq "LOG MSG", "Log Callback give good message"); 
    21     }, 
    22 ); 
    23  
    24 $odr->logmsg('INFO', undef, "LOG %s", 'MSG'); 
    25 # DEBUG msg are filtrered, so if more test are run, there is a pb here 
    26 $odr->logmsg('DEBUG', undef, "LOG %s", 'MSG'); 
    27 $odr = undef; 
    28  
    29 system("rm -fr $td"); 
    30 } 
Note: See TracChangeset for help on using the changeset viewer.