Merge branch 'storageareas' of github.com:connortechnology/ZoneMinder into storageareas
This commit is contained in:
commit
934ce654f9
|
@ -245,7 +245,8 @@ sub initialise( @ ) {
|
|||
$tempSyslogLevel = $level if defined($level = $this->getTargettedEnv('LOG_LEVEL_SYSLOG'));
|
||||
|
||||
if ( $Config{ZM_LOG_DEBUG} ) {
|
||||
foreach my $target ( split( /\|/, $Config{ZM_LOG_DEBUG_TARGET} ) ) {
|
||||
# Splitting on an empty string doesn't return an empty string, it returns an empty array
|
||||
foreach my $target ( $Config{ZM_LOG_DEBUG_TARGET} ? split(/\|/, $Config{ZM_LOG_DEBUG_TARGET}) : '' ) {
|
||||
if ( $target eq $this->{id}
|
||||
|| $target eq '_'.$this->{id}
|
||||
|| $target eq $this->{idRoot}
|
||||
|
@ -278,6 +279,9 @@ sub initialise( @ ) {
|
|||
|
||||
$this->{initialised} = !undef;
|
||||
|
||||
# this function can get called on a previously initialized log Object, so clean any sth's
|
||||
$this->{sth} = undef;
|
||||
|
||||
Debug( 'LogOpts: level='.$codes{$this->{level}}
|
||||
.'/'.$codes{$this->{effectiveLevel}}
|
||||
.', screen='.$codes{$this->{termLevel}}
|
||||
|
@ -319,6 +323,8 @@ sub reinitialise {
|
|||
my $screenLevel = $this->termLevel();
|
||||
$this->termLevel(NOLOG);
|
||||
$this->termLevel($screenLevel) if $screenLevel > NOLOG;
|
||||
|
||||
$this->{sth} = undef;
|
||||
}
|
||||
|
||||
# Prevents undefined logging levels
|
||||
|
@ -392,6 +398,12 @@ sub level {
|
|||
|
||||
# ICON: I am remarking this out because I don't see the point of having an effective level, if we are just going to set it to level.
|
||||
#$this->{effectiveLevel} = $this->{level} if ( $this->{level} > $this->{effectiveLevel} );
|
||||
# ICON: The point is that LOG_DEBUG can be set either in db or in env var and will get passed in here.
|
||||
# So this will turn on debug, even if not output has Debug level turned on. I think it should be the other way around
|
||||
|
||||
# ICON: Let's try this line instead. effectiveLevel is 1 DEBUG from above, but LOG_DEBUG is off, then $this->level will be 0, and
|
||||
# so effectiveLevel will become 0
|
||||
$this->{effectiveLevel} = $this->{level} if ( $this->{level} < $this->{effectiveLevel} );
|
||||
}
|
||||
return $this->{level};
|
||||
}
|
||||
|
@ -517,55 +529,59 @@ sub logPrint {
|
|||
|
||||
if ( $level <= $this->{effectiveLevel} ) {
|
||||
$string =~ s/[\r\n]+$//g;
|
||||
|
||||
my $code = $codes{$level};
|
||||
if ( $level <= $this->{syslogLevel} ) {
|
||||
syslog($priorities{$level}, $codes{$level}.' [%s]', $string);
|
||||
}
|
||||
|
||||
my ($seconds, $microseconds) = gettimeofday();
|
||||
my $message = sprintf(
|
||||
'%s.%06d %s[%d].%s [%s]'
|
||||
, strftime('%x %H:%M:%S', localtime($seconds))
|
||||
, $microseconds
|
||||
, $this->{id}
|
||||
, $$
|
||||
, $code
|
||||
, $string
|
||||
);
|
||||
if ( $this->{trace} ) {
|
||||
$message = Carp::shortmess($message);
|
||||
} else {
|
||||
$message = $message."\n";
|
||||
if ( $level <= $this->{fileLevel} or $level <= $this->{termLevel} ) {
|
||||
my $message = sprintf(
|
||||
'%s.%06d %s[%d].%s [%s]'
|
||||
, strftime('%x %H:%M:%S', localtime($seconds))
|
||||
, $microseconds
|
||||
, $this->{id}
|
||||
, $$
|
||||
, $codes{$level}
|
||||
, $string
|
||||
);
|
||||
if ( $this->{trace} ) {
|
||||
$message = Carp::shortmess($message);
|
||||
} else {
|
||||
$message = $message."\n";
|
||||
}
|
||||
print($LOGFILE $message) if $level <= $this->{fileLevel};
|
||||
print(STDERR $message) if $level <= $this->{termLevel};
|
||||
}
|
||||
if ( $level <= $this->{syslogLevel} ) {
|
||||
syslog($priorities{$level}, $code.' [%s]', $string);
|
||||
}
|
||||
print($LOGFILE $message) if $level <= $this->{fileLevel};
|
||||
print(STDERR $message) if $level <= $this->{termLevel};
|
||||
|
||||
if ( $level <= $this->{databaseLevel} ) {
|
||||
if ( ( $this->{dbh} and $this->{dbh}->ping() ) or ( $this->{dbh} = ZoneMinder::Database::zmDbConnect() ) ) {
|
||||
|
||||
|
||||
my $sql = 'INSERT INTO Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, NULL )';
|
||||
$this->{sth} = $this->{dbh}->prepare_cached($sql) if ! $this->{sth};
|
||||
if ( !$this->{sth} ) {
|
||||
if ( ! ( $this->{dbh} and $this->{dbh}->ping() ) ) {
|
||||
$this->{sth} = undef;
|
||||
if ( ! ( $this->{dbh} = ZoneMinder::Database::zmDbConnect() ) ) {
|
||||
print(STDERR "Can't log to database: ");
|
||||
$this->{databaseLevel} = NOLOG;
|
||||
Error("Can't prepare log entry '$sql': ".$this->{dbh}->errstr());
|
||||
} else {
|
||||
my $res = $this->{sth}->execute($seconds+($microseconds/1000000.0)
|
||||
, $this->{id}
|
||||
, $$
|
||||
, $level
|
||||
, $code
|
||||
, $string
|
||||
, $this->{fileName}
|
||||
);
|
||||
if ( !$res ) {
|
||||
$this->{databaseLevel} = NOLOG;
|
||||
Error("Can't execute log entry '$sql': ".$this->{dbh}->errstr());
|
||||
}
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
print(STDERR "Can't log to database: ");
|
||||
}
|
||||
|
||||
my $sql = 'INSERT INTO Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, NULL )';
|
||||
$this->{sth} = $this->{dbh}->prepare_cached($sql) if ! $this->{sth};
|
||||
if ( !$this->{sth} ) {
|
||||
$this->{databaseLevel} = NOLOG;
|
||||
Error("Can't prepare log entry '$sql': ".$this->{dbh}->errstr());
|
||||
return;
|
||||
}
|
||||
|
||||
my $res = $this->{sth}->execute($seconds+($microseconds/1000000.0)
|
||||
, $this->{id}
|
||||
, $$
|
||||
, $level
|
||||
, $codes{$level}
|
||||
, $string
|
||||
, $this->{fileName}
|
||||
);
|
||||
if ( !$res ) {
|
||||
$this->{databaseLevel} = NOLOG;
|
||||
Error("Can't execute log entry '$sql': ".$this->{dbh}->errstr());
|
||||
}
|
||||
} # end if doing db logging
|
||||
} # end if level < effectivelevel
|
||||
|
|
|
@ -245,6 +245,16 @@ our %terminating_processes;
|
|||
our $zm_terminate = 0;
|
||||
|
||||
sub run {
|
||||
|
||||
# Call this first otherwise stdout/stderror redirects to the pidfile = bad
|
||||
if ( open(my $PID, '>', ZM_PID) ) {
|
||||
print($PID $$);
|
||||
close($PID);
|
||||
} else {
|
||||
# Log not initialized at this point so use die instead
|
||||
die "Can't open pid file at ".ZM_PID."\n";
|
||||
}
|
||||
|
||||
my $fd = 0;
|
||||
|
||||
# THis also closes dbh and CLIENT and SERVER
|
||||
|
@ -254,6 +264,8 @@ sub run {
|
|||
|
||||
setpgrp();
|
||||
|
||||
# dbh got closed with the rest of the fd's above, so need to reconnect.
|
||||
my $dbh = zmDbConnect(1);
|
||||
logInit();
|
||||
|
||||
dPrint(ZoneMinder::Logger::INFO, 'Server starting at '
|
||||
|
@ -261,18 +273,10 @@ sub run {
|
|||
."\n"
|
||||
);
|
||||
|
||||
if ( open(my $PID, '>', ZM_PID) ) {
|
||||
print($PID $$);
|
||||
close($PID);
|
||||
} else {
|
||||
Error("Can't open pid file at " . ZM_PID);
|
||||
}
|
||||
|
||||
# Tell any existing processes to die, wait 1 second between TERM and KILL
|
||||
killAll(1);
|
||||
|
||||
dPrint(ZoneMinder::Logger::INFO, 'Socket should be open at ' .main::SOCK_FILE);
|
||||
my $dbh = zmDbConnect(1);
|
||||
socket(SERVER, PF_UNIX, SOCK_STREAM, 0) or Fatal("Can't open socket: $!");
|
||||
unlink(main::SOCK_FILE) or Error('Unable to unlink ' . main::SOCK_FILE .". Error message was: $!") if -e main::SOCK_FILE;
|
||||
bind(SERVER, $saddr) or Fatal("Can't bind to " . main::SOCK_FILE . ": $!");
|
||||
|
@ -365,9 +369,7 @@ sub run {
|
|||
#print( "Select timed out\n" );
|
||||
}
|
||||
|
||||
Debug("restartPending");
|
||||
restartPending();
|
||||
Debug("check_for_processes_to_kill");
|
||||
check_for_processes_to_kill();
|
||||
|
||||
} # end while
|
||||
|
@ -396,7 +398,6 @@ sub dPrint {
|
|||
my $logLevel = shift;
|
||||
# One thought here, if no client exists to read these... does it block?
|
||||
if ( fileno(CLIENT) ) {
|
||||
Debug("Have fileno for CLIENT, printing ");
|
||||
print CLIENT @_
|
||||
}
|
||||
if ( $logLevel == ZoneMinder::Logger::DEBUG ) {
|
||||
|
@ -435,7 +436,7 @@ sub start {
|
|||
sigprocmask(SIG_BLOCK, $blockset, $sigset) or Fatal("Can't block SIGCHLD: $!");
|
||||
if ( my $cpid = fork() ) {
|
||||
# This logReinit is required. Not sure why.
|
||||
logReinit();
|
||||
#logReinit();
|
||||
|
||||
$process->{pid} = $cpid;
|
||||
$process->{started} = time();
|
||||
|
|
|
@ -149,21 +149,8 @@ if ( $command =~ /^(start|stop|restart)$/ ) {
|
|||
$command = $1;
|
||||
|
||||
if ( systemdRunning() && !calledBysystem() ) {
|
||||
Info("Redirecting command through systemctl");
|
||||
my $path = qx(which systemctl);
|
||||
Info("Path is $path");
|
||||
Info("Status is $?");
|
||||
my $status = $? >> 8;
|
||||
Info("Status is $status");
|
||||
( $path ) = $path =~ /^(.*)$/;
|
||||
|
||||
if ( !$path || $status ) {
|
||||
Fatal('Unable to determine systemctl executable. Is systemd in use?');
|
||||
}
|
||||
Info("exec $path $command zoneminder");
|
||||
exec("$path $command zoneminder");
|
||||
} else {
|
||||
Debug("called by SystemD");
|
||||
qx(@BINDIR@/zmsystemctl.pl $command);
|
||||
$command = '';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#endif
|
||||
|
||||
bool Logger::smInitialised = false;
|
||||
Logger *Logger::smInstance = 0;
|
||||
Logger *Logger::smInstance = NULL;
|
||||
|
||||
Logger::StringMap Logger::smCodes;
|
||||
Logger::IntMap Logger::smSyslogPriorities;
|
||||
|
@ -58,9 +58,9 @@ static void subtractTime( struct timeval * const tp1, struct timeval * const tp2
|
|||
void Logger::usrHandler( int sig ) {
|
||||
Logger *logger = fetch();
|
||||
if ( sig == SIGUSR1 )
|
||||
logger->level( logger->level()+1 );
|
||||
logger->level(logger->level()+1);
|
||||
else if ( sig == SIGUSR2 )
|
||||
logger->level( logger->level()-1 );
|
||||
logger->level(logger->level()-1);
|
||||
Info("Logger - Level changed to %d", logger->level());
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,7 @@ Logger::Logger() :
|
|||
mFlush(false) {
|
||||
|
||||
if ( smInstance ) {
|
||||
Panic( "Attempt to create second instance of Logger class" );
|
||||
Panic("Attempt to create second instance of Logger class");
|
||||
}
|
||||
|
||||
if ( !smInitialised ) {
|
||||
|
@ -133,11 +133,11 @@ void Logger::initialise(const std::string &id, const Options &options) {
|
|||
|
||||
std::string tempLogFile;
|
||||
|
||||
if ( (envPtr = getTargettedEnv("LOG_FILE")) )
|
||||
if ( (envPtr = getTargettedEnv("LOG_FILE")) ) {
|
||||
tempLogFile = envPtr;
|
||||
else if ( options.mLogFile.size() )
|
||||
} else if ( options.mLogFile.size() ) {
|
||||
tempLogFile = options.mLogFile;
|
||||
else {
|
||||
} else {
|
||||
if ( options.mLogPath.size() ) {
|
||||
mLogPath = options.mLogPath;
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ void Logger::initialise(const std::string &id, const Options &options) {
|
|||
tempSyslogLevel = config.log_level_syslog >= DEBUG1 ? DEBUG9 : config.log_level_syslog;
|
||||
|
||||
// Legacy
|
||||
if ( (envPtr = getenv( "LOG_PRINT" )) )
|
||||
if ( (envPtr = getenv("LOG_PRINT")) )
|
||||
tempTerminalLevel = atoi(envPtr) ? DEBUG9 : NOLOG;
|
||||
|
||||
if ( (envPtr = getTargettedEnv("LOG_LEVEL")) )
|
||||
|
@ -218,7 +218,7 @@ void Logger::initialise(const std::string &id, const Options &options) {
|
|||
|
||||
mFlush = false;
|
||||
if ( (envPtr = getenv("LOG_FLUSH")) ) {
|
||||
mFlush = atoi( envPtr );
|
||||
mFlush = atoi(envPtr);
|
||||
} else if ( config.log_debug ) {
|
||||
mFlush = true;
|
||||
}
|
||||
|
@ -571,12 +571,12 @@ void Logger::logPrint( bool hex, const char * const filepath, const int line, co
|
|||
}
|
||||
}
|
||||
|
||||
void logInit( const char *name, const Logger::Options &options ) {
|
||||
void logInit(const char *name, const Logger::Options &options) {
|
||||
if ( !Logger::smInstance )
|
||||
Logger::smInstance = new Logger();
|
||||
Logger::Options tempOptions = options;
|
||||
tempOptions.mLogPath = staticConfig.PATH_LOGS;
|
||||
Logger::smInstance->initialise( name, tempOptions );
|
||||
Logger::smInstance->initialise(name, tempOptions);
|
||||
}
|
||||
|
||||
void logTerm() {
|
||||
|
|
|
@ -633,7 +633,7 @@ Debug(2, "Have checking command Queue for connkey: %d", connkey );
|
|||
// Send the next frame
|
||||
Monitor::Snapshot *snap = &monitor->image_buffer[index];
|
||||
|
||||
//Debug(2, "sending Frame.");
|
||||
Debug(2, "sending Frame.");
|
||||
if ( !sendFrame(snap->image, snap->timestamp) ) {
|
||||
Debug(2, "sendFrame failed, quiting.");
|
||||
zm_terminate = true;
|
||||
|
@ -687,7 +687,7 @@ Debug(2, "Have checking command Queue for connkey: %d", connkey );
|
|||
} // end if buffered playback
|
||||
frame_count++;
|
||||
} else {
|
||||
Debug(5,"Waiting for capture");
|
||||
Debug(4,"Waiting for capture last_write_index=%u", monitor->shared_data->last_write_index);
|
||||
} // end if ( (unsigned int)last_read_index != monitor->shared_data->last_write_index )
|
||||
|
||||
unsigned long sleep_time = (unsigned long)((1000000 * ZM_RATE_BASE)/((base_fps?base_fps:1)*abs(replay_rate*2)));
|
||||
|
|
|
@ -376,7 +376,10 @@ int X264MP4Writer::x264config() {
|
|||
x264params.b_annexb = 0;
|
||||
|
||||
/* TODO: Setup error handler */
|
||||
// x264params.i_log_level = X264_LOG_DEBUG;
|
||||
if ( logDebugging() )
|
||||
x264params.i_log_level = X264_LOG_DEBUG;
|
||||
else
|
||||
x264params.i_log_level = X264_LOG_NONE;
|
||||
|
||||
/* Process user parameters (excluding preset, tune and profile) */
|
||||
for ( unsigned int i = 0; i < user_params.size(); i++ ) {
|
||||
|
|
|
@ -83,7 +83,7 @@ int main( int argc, char *argv[] ) {
|
|||
while (1) {
|
||||
int option_index = 0;
|
||||
|
||||
int c = getopt_long (argc, argv, "m:h:v", long_options, &option_index);
|
||||
int c = getopt_long(argc, argv, "m:h:v", long_options, &option_index);
|
||||
if ( c == -1 ) {
|
||||
break;
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ int main( int argc, char *argv[] ) {
|
|||
unsigned int analysis_update_delay = monitor->GetAnalysisUpdateDelay();
|
||||
time_t last_analysis_update_time, cur_time;
|
||||
monitor->UpdateAdaptiveSkip();
|
||||
last_analysis_update_time = time( 0 );
|
||||
last_analysis_update_time = time(0);
|
||||
|
||||
while( (!zm_terminate) && monitor->ShmValid() ) {
|
||||
// Process the next image
|
||||
|
@ -181,5 +181,5 @@ int main( int argc, char *argv[] ) {
|
|||
Image::Deinitialise();
|
||||
logTerm();
|
||||
zmDbClose();
|
||||
return( 0 );
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit ea90c0cd7f6e24333a90885e563b5d30b793db29
|
||||
Subproject commit ca91b87fda8e006e4fca2ed870f24f9a29c2905d
|
|
@ -1 +1 @@
|
|||
Subproject commit 0bd63fb464957080ead342db58ca9e01532cf1ef
|
||||
Subproject commit c3976f1478c681b0bbc132ec3a3e82c3984eeed5
|
|
@ -38,13 +38,6 @@
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
#dvrControls input {
|
||||
height: 20px;
|
||||
width: 28px;
|
||||
padding-bottom: 3px;
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
#dvrControls input[disabled] {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ ob_start();
|
|||
<?php } ?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="consoleTableBody">
|
||||
<tbody id="consoleTableBody">
|
||||
<?php
|
||||
$table_head = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
@ -318,7 +318,7 @@ for( $monitor_i = 0; $monitor_i < count($displayMonitors); $monitor_i += 1 ) {
|
|||
<?php
|
||||
}
|
||||
?>
|
||||
<td class="colZones"><?php echo makePopupLink( '?view=zones&mid='.$monitor['Id'], 'zmZones', array( 'zones', $monitor['Width'], $monitor['Height'] ), $monitor['ZoneCount'], $running && canView('Monitors') ) ?></td>
|
||||
<td class="colZones"><?php echo makePopupLink('?view=zones&mid='.$monitor['Id'], 'zmZones', array('zones', $monitor['Width'], $monitor['Height']), $monitor['ZoneCount'], canView('Monitors')) ?></td>
|
||||
<?php
|
||||
if ( canEdit('Monitors') ) {
|
||||
?>
|
||||
|
|
Loading…
Reference in New Issue