- Timestamp:
- 11/22/05 17:39:56 (19 years ago)
- 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 6 6 use warnings; 7 7 use Config::IniFiles; 8 use DBD::SQLite; 9 10 my @loglevel = ( 11 'DEBUG', 12 'INFO', 13 'RESULT', 14 'WARNING', 15 'ERROR', 16 'FATAL', 17 ); 8 18 9 19 our $VERSION = 0.01; … … 28 38 29 39 sub new { 30 my ($class, $configfile ) = @_;40 my ($class, $configfile, %options) = @_; 31 41 my $obsdata = { 32 42 config => new Config::IniFiles( … … 35 45 -allowcontinue => 1 36 46 ), 47 verbose => 1, 37 48 }; 38 49 39 50 if ($configfile) { 40 51 (-f $configfile && -r _) or return undef; … … 43 54 $obsdata->{config} or return undef; 44 55 56 $obsdata->{dir} = $options{dir} || $obsdata->{config}->val('global', 'dir'); 57 45 58 bless($obsdata, $class); 46 59 } 60 61 sub DESTROY { 62 my ($self) = @_; 63 64 if ($self->{loghandle}) { 65 close($self->{loghandle}); 66 $self->{loghandle} = undef; 67 } 68 69 } 70 71 sub 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 82 sub 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 95 sub 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 47 117 48 118 =head2 checkconfig() -
trunk/soft/ObsData/ObsData/Repository.pm
- Property cvs2svn:cvs-rev changed from 1.2 to 1.3
r31 r43 6 6 use warnings; 7 7 use ObsData; 8 use DBD::SQLite;9 8 10 9 our @ISA = qw(ObsData); 11 12 my @loglevel = (13 'DEBUG',14 'INFO',15 'RESULT',16 'WARNING',17 'ERROR',18 'FATAL',19 );20 10 21 11 =head1 METHODS … … 23 13 =head2 new 24 14 25 Parameters list:26 27 =item configfile28 29 The configuration file to use30 31 =item sublog32 33 Coderef to external loging function34 35 =item subloglevel36 37 Minimum log level to call sublog, default is 138 39 =item minloglevel40 41 Minimum loglevel for internal logging42 43 =item dir44 45 The directory where internal data are put46 47 15 =cut 48 16 49 17 sub new { 50 my ($class, %config) = @_;18 my ($class, $obsdata) = @_; 51 19 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; 63 21 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); 143 23 } 144 24 -
trunk/soft/ObsData/t/O-01.t
- Property cvs2svn:cvs-rev changed from 1.3 to 1.4
r25 r43 1 1 # $Id$ 2 2 3 use Test::More tests => 4;3 use Test::More tests => 5; 4 4 5 5 use_ok('ObsData'); 6 7 can_ok('ObsData', qw(init_repository)); 6 8 7 9 can_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 1 1 # $Id$ 2 2 3 use Test::More tests => 12; 3 use Test::More tests => 15; 4 use File::Temp qw(tempdir); 4 5 5 6 use_ok('ObsData'); 6 7 7 ok(my $o = ObsData->new('testdata/obsdata-conftest'), "Can create object"); 8 my $td = tempdir; 9 ok(ObsData::init_repository($td), "Can initialize repos data"); 10 ok(-f "$td/obsdata.db", "db is really create"); 11 ok(-d "$td/logs", "log directory exists"); 12 13 ok(my $o = ObsData->new('testdata/obsdata-conftest', dir => $td), "Can create object"); 8 14 ok($o->is_obs('ohp'), "Isobs works"); 9 15 ok(!$o->is_obs('ozone'), "Isobs works"); … … 24 30 ok(eq_set([ $o->list_datatype ], [ 'oxygene', 'ozone' ]), "can get data type"); 25 31 print STDERR join(" ", $o->list_datatype); 32 33 system("rm -fr $td"); -
trunk/soft/ObsData/t/OR-01.t
- Property cvs2svn:cvs-rev changed from 1.2 to 1.3
r28 r43 1 1 # $Id$ 2 2 3 use Test::More tests => 4;3 use Test::More tests => 2; 4 4 5 5 use_ok('ObsData::Repository'); 6 6 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 10 7 ok(!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 2 1 # $Id$ 3 2 4 use Test::More tests => 6;3 use Test::More tests => 1; 5 4 use File::Temp qw(tempdir); 6 5 use ObsData::Repository; 7 6 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"); 7 ok(1, "Dummy test to keep file into cvs"); 13 8 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 here26 $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.