mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2026-03-16 21:08:01 -04:00
use less ram loading events
This commit is contained in:
@@ -37,16 +37,16 @@ define( 'STRF_TL_AXIS_RANGE_YEAR1', '%b %Y' );
|
||||
define( 'STRF_TL_AXIS_RANGE_YEAR2', STRF_TL_AXIS_RANGE_YEAR1 );
|
||||
|
||||
// When the chart range is months
|
||||
define( "STRF_TL_AXIS_RANGE_MONTH1", "%b" );
|
||||
define( "STRF_TL_AXIS_RANGE_MONTH2", STRF_TL_AXIS_RANGE_MONTH1." %Y" );
|
||||
define( 'STRF_TL_AXIS_RANGE_MONTH1', '%b' );
|
||||
define( 'STRF_TL_AXIS_RANGE_MONTH2', STRF_TL_AXIS_RANGE_MONTH1.' %Y' );
|
||||
|
||||
// When the chart range is days
|
||||
define( "STRF_TL_AXIS_RANGE_DAY1", "%d" );
|
||||
define( "STRF_TL_AXIS_RANGE_DAY2", STRF_TL_AXIS_RANGE_DAY1." %b %Y" );
|
||||
define( 'STRF_TL_AXIS_RANGE_DAY1', '%d' );
|
||||
define( 'STRF_TL_AXIS_RANGE_DAY2', STRF_TL_AXIS_RANGE_DAY1.' %b %Y' );
|
||||
|
||||
// When the chart range is less than a day
|
||||
define( "STRF_TL_AXIS_RANGE_TIME1", "%H:%M" );
|
||||
define( "STRF_TL_AXIS_RANGE_TIME2", STRF_TL_AXIS_RANGE_TIME1.", %d %b %Y" );
|
||||
define( 'STRF_TL_AXIS_RANGE_TIME1', '%H:%M' );
|
||||
define( 'STRF_TL_AXIS_RANGE_TIME2', STRF_TL_AXIS_RANGE_TIME1.', %d %b %Y' );
|
||||
|
||||
//
|
||||
// These are the time axis tick labels
|
||||
@@ -74,56 +74,56 @@ $minEventWidth = 3;
|
||||
$maxEventWidth = 6;
|
||||
|
||||
$chart = array(
|
||||
"width"=>700,
|
||||
"height"=>460,
|
||||
"image" => array(
|
||||
"width"=>264,
|
||||
"height"=>220,
|
||||
"topOffset"=>20,
|
||||
'width'=>700,
|
||||
'height'=>460,
|
||||
'image' => array(
|
||||
'width'=>264,
|
||||
'height'=>220,
|
||||
'topOffset'=>20,
|
||||
),
|
||||
"imageText" => array(
|
||||
"width"=>400,
|
||||
"height"=>30,
|
||||
"topOffset"=>20,
|
||||
'imageText' => array(
|
||||
'width'=>400,
|
||||
'height'=>30,
|
||||
'topOffset'=>20,
|
||||
),
|
||||
"graph" => array(
|
||||
"width"=>600,
|
||||
"height"=>160,
|
||||
"topOffset"=>30,
|
||||
'graph' => array(
|
||||
'width'=>600,
|
||||
'height'=>160,
|
||||
'topOffset'=>30,
|
||||
),
|
||||
"title" => array(
|
||||
"topOffset"=>50
|
||||
'title' => array(
|
||||
'topOffset'=>50
|
||||
),
|
||||
"key" => array(
|
||||
"topOffset"=>50
|
||||
'key' => array(
|
||||
'topOffset'=>50
|
||||
),
|
||||
"axes" => array(
|
||||
"x" => array(
|
||||
"height" => 20,
|
||||
'axes' => array(
|
||||
'x' => array(
|
||||
'height' => 20,
|
||||
),
|
||||
"y" => array(
|
||||
"width" => 30,
|
||||
'y' => array(
|
||||
'width' => 30,
|
||||
),
|
||||
),
|
||||
"grid" => array(
|
||||
"x" => array(
|
||||
"major" => array(
|
||||
"max" => 12,
|
||||
"min" => 4,
|
||||
'grid' => array(
|
||||
'x' => array(
|
||||
'major' => array(
|
||||
'max' => 12,
|
||||
'min' => 4,
|
||||
),
|
||||
"minor" => array(
|
||||
"max" => 48,
|
||||
"min" => 12,
|
||||
'minor' => array(
|
||||
'max' => 48,
|
||||
'min' => 12,
|
||||
),
|
||||
),
|
||||
"y" => array(
|
||||
"major" => array(
|
||||
"max" => 8,
|
||||
"min" => 1,
|
||||
'y' => array(
|
||||
'major' => array(
|
||||
'max' => 8,
|
||||
'min' => 1,
|
||||
),
|
||||
"minor" => array(
|
||||
"max" => 0,
|
||||
"min" => 0,
|
||||
'minor' => array(
|
||||
'max' => 0,
|
||||
'min' => 0,
|
||||
),
|
||||
),
|
||||
),
|
||||
@@ -152,7 +152,7 @@ if ( !empty($user['MonitorIds']) ) {
|
||||
}
|
||||
|
||||
if ( isset($_REQUEST['filter']) )
|
||||
$tree = parseFilterToTree( $_REQUEST['filter'] );
|
||||
$tree = parseFilterToTree( $_REQUEST['filter']['Query'] );
|
||||
else
|
||||
$tree = false;
|
||||
|
||||
@@ -253,16 +253,16 @@ if ( $tree ) {
|
||||
}
|
||||
|
||||
$scales = array(
|
||||
array( "name"=>"year", "factor"=>60*60*24*365, "align"=>1, "zoomout"=>2, "label"=>STRF_TL_AXIS_LABEL_YEAR ),
|
||||
array( "name"=>"month", "factor"=>60*60*24*30, "align"=>1, "zoomout"=>12, "label"=>STRF_TL_AXIS_LABEL_MONTH ),
|
||||
array( "name"=>"week", "factor"=>60*60*24*7, "align"=>1, "zoomout"=>4.25, "label"=>STRF_TL_AXIS_LABEL_WEEK, "labelCheck"=>"%W" ),
|
||||
array( "name"=>"day", "factor"=>60*60*24, "align"=>1, "zoomout"=>7, "label"=>STRF_TL_AXIS_LABEL_DAY ),
|
||||
array( "name"=>"hour4", "factor"=>60*60, "align"=>4, "zoomout"=>6, "label"=>STRF_TL_AXIS_LABEL_4HOUR, "labelCheck"=>"%H" ),
|
||||
array( "name"=>"hour", "factor"=>60*60, "align"=>1, "zoomout"=>4, "label"=>STRF_TL_AXIS_LABEL_HOUR, "labelCheck"=>"%H" ),
|
||||
array( "name"=>"minute10", "factor"=>60, "align"=>10, "zoomout"=>6, "label"=>STRF_TL_AXIS_LABEL_10MINUTE, "labelCheck"=>"%M" ),
|
||||
array( "name"=>"minute", "factor"=>60, "align"=>1, "zoomout"=>10, "label"=>STRF_TL_AXIS_LABEL_MINUTE, "labelCheck"=>"%M" ),
|
||||
array( "name"=>"second10", "factor"=>1, "align"=>10, "zoomout"=>6, "label"=>STRF_TL_AXIS_LABEL_10SECOND ),
|
||||
array( "name"=>"second", "factor"=>1, "align"=>1, "zoomout"=>10, "label"=>STRF_TL_AXIS_LABEL_SECOND ),
|
||||
array( 'name'=>"year", 'factor'=>60*60*24*365, 'align'=>1, 'zoomout'=>2, 'label'=>STRF_TL_AXIS_LABEL_YEAR ),
|
||||
array( 'name'=>"month", 'factor'=>60*60*24*30, 'align'=>1, 'zoomout'=>12, 'label'=>STRF_TL_AXIS_LABEL_MONTH ),
|
||||
array( 'name'=>"week", 'factor'=>60*60*24*7, 'align'=>1, 'zoomout'=>4.25, 'label'=>STRF_TL_AXIS_LABEL_WEEK, 'labelCheck'=>"%W" ),
|
||||
array( 'name'=>"day", 'factor'=>60*60*24, 'align'=>1, 'zoomout'=>7, 'label'=>STRF_TL_AXIS_LABEL_DAY ),
|
||||
array( 'name'=>"hour4", 'factor'=>60*60, 'align'=>4, 'zoomout'=>6, 'label'=>STRF_TL_AXIS_LABEL_4HOUR, 'labelCheck'=>"%H" ),
|
||||
array( 'name'=>"hour", 'factor'=>60*60, 'align'=>1, 'zoomout'=>4, 'label'=>STRF_TL_AXIS_LABEL_HOUR, 'labelCheck'=>"%H" ),
|
||||
array( 'name'=>"minute10", 'factor'=>60, 'align'=>10, 'zoomout'=>6, 'label'=>STRF_TL_AXIS_LABEL_10MINUTE, 'labelCheck'=>"%M" ),
|
||||
array( 'name'=>"minute", 'factor'=>60, 'align'=>1, 'zoomout'=>10, 'label'=>STRF_TL_AXIS_LABEL_MINUTE, 'labelCheck'=>"%M" ),
|
||||
array( 'name'=>"second10", 'factor'=>1, 'align'=>10, 'zoomout'=>6, 'label'=>STRF_TL_AXIS_LABEL_10SECOND ),
|
||||
array( 'name'=>"second", 'factor'=>1, 'align'=>1, 'zoomout'=>10, 'label'=>STRF_TL_AXIS_LABEL_SECOND ),
|
||||
);
|
||||
|
||||
$majXScale = getDateScale( $scales, $range, $chart['grid']['x']['major']['min'], $chart['grid']['x']['major']['max'] );
|
||||
@@ -291,17 +291,17 @@ if ( isset($minTime) && isset($maxTime) ) {
|
||||
$eventsSql .= " and EndTime >= '$minTime' and StartTime <= '$maxTime'";
|
||||
}
|
||||
|
||||
$eventsSql .= " order by Id asc";
|
||||
$eventsSql .= ' order by Id asc';
|
||||
//echo "ESQL: $eventsSql<br>";
|
||||
|
||||
$chart['data'] = array(
|
||||
"x" => array(
|
||||
"lo" => strtotime( $minTime ),
|
||||
"hi" => strtotime( $maxTime ),
|
||||
'x' => array(
|
||||
'lo' => strtotime( $minTime ),
|
||||
'hi' => strtotime( $maxTime ),
|
||||
),
|
||||
"y" => array(
|
||||
"lo" => 0,
|
||||
"hi" => 0,
|
||||
'y' => array(
|
||||
'lo' => 0,
|
||||
'hi' => 0,
|
||||
)
|
||||
);
|
||||
|
||||
@@ -311,95 +311,105 @@ $chart['data']['x']['density'] = $chart['data']['x']['range']/$chart['graph']['w
|
||||
$monEventSlots = array();
|
||||
$monFrameSlots = array();
|
||||
$monitorIds = array();
|
||||
foreach( dbFetchAll( $eventsSql ) as $event ) {
|
||||
if ( !isset($monitorIds[$event['MonitorId']]) )
|
||||
$monitorIds[$event['MonitorId']] = true;
|
||||
$events_result = dbQuery( $eventsSql );
|
||||
if ( ! $events_result ) {
|
||||
Fatal( "SQL-ERR");
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !isset($monEventSlots[$event['MonitorId']]) )
|
||||
$monEventSlots[$event['MonitorId']] = array();
|
||||
$first_event = $event = $events_result->fetch( PDO::FETCH_ASSOC );
|
||||
if ( $event ) {
|
||||
do {
|
||||
|
||||
if ( !isset($monFrameSlots[$event['MonitorId']]) )
|
||||
$monFrameSlots[$event['MonitorId']] = array();
|
||||
if ( !isset($monitorIds[$event['MonitorId']]) )
|
||||
$monitorIds[$event['MonitorId']] = true;
|
||||
|
||||
$currEventSlots = &$monEventSlots[$event['MonitorId']];
|
||||
$currFrameSlots = &$monFrameSlots[$event['MonitorId']];
|
||||
if ( !isset($monEventSlots[$event['MonitorId']]) )
|
||||
$monEventSlots[$event['MonitorId']] = array();
|
||||
|
||||
$startTimeT = strtotime($event['StartTime']);
|
||||
$startIndex = $rawStartIndex = (int)(($startTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
if ( $startIndex < 0 )
|
||||
$startIndex = 0;
|
||||
if ( !isset($monFrameSlots[$event['MonitorId']]) )
|
||||
$monFrameSlots[$event['MonitorId']] = array();
|
||||
|
||||
if ( isset($event['EndTime']) )
|
||||
$endTimeT = strtotime($event['EndTime']);
|
||||
else
|
||||
$endTimeT = time();
|
||||
$endIndex = $rawEndIndex = (int)(($endTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
$currEventSlots = &$monEventSlots[$event['MonitorId']];
|
||||
$currFrameSlots = &$monFrameSlots[$event['MonitorId']];
|
||||
|
||||
if ( $endIndex >= $chart['graph']['width'] )
|
||||
$endIndex = $chart['graph']['width'] - 1;
|
||||
$startTimeT = strtotime($event['StartTime']);
|
||||
$startIndex = $rawStartIndex = (int)(($startTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
if ( $startIndex < 0 )
|
||||
$startIndex = 0;
|
||||
|
||||
for ( $i = $startIndex; $i <= $endIndex; $i++ ) {
|
||||
if ( !isset($currEventSlots[$i]) ) {
|
||||
if ( $rawStartIndex == $rawEndIndex ) {
|
||||
$offset = 1;
|
||||
} else {
|
||||
$offset = 1 + ($event['Frames']?((int)(($event['Frames']-1)*(($i-$rawStartIndex)/($rawEndIndex-$rawStartIndex)))):0);
|
||||
}
|
||||
$currEventSlots[$i] = array( "count"=>0, "width"=>1, "offset"=>$offset, "event"=>$event );
|
||||
} else {
|
||||
$currEventSlots[$i]['count']++;
|
||||
}
|
||||
}
|
||||
if ( $event['MaxScore'] > 0 ) {
|
||||
if ( $startIndex == $endIndex ) {
|
||||
$framesSql = 'SELECT FrameId,Score FROM Frames WHERE EventId = ? AND Score > 0 ORDER BY Score DESC LIMIT 1';
|
||||
$frame = dbFetchOne( $framesSql, NULL, array($event['Id']) );
|
||||
if ( isset($event['EndTime']) )
|
||||
$endTimeT = strtotime($event['EndTime']);
|
||||
else
|
||||
$endTimeT = time();
|
||||
$endIndex = $rawEndIndex = (int)(($endTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
|
||||
$i = $startIndex;
|
||||
if ( !isset($currFrameSlots[$i]) ) {
|
||||
$currFrameSlots[$i] = array( 'count'=>1, 'value'=>$event['MaxScore'], 'event'=>$event, 'frame'=>$frame );
|
||||
} else {
|
||||
$currFrameSlots[$i]['count']++;
|
||||
if ( $event['MaxScore'] > $currFrameSlots[$i]['value'] ) {
|
||||
$currFrameSlots[$i]['value'] = $event['MaxScore'];
|
||||
$currFrameSlots[$i]['event'] = $event;
|
||||
$currFrameSlots[$i]['frame'] = $frame;
|
||||
}
|
||||
}
|
||||
if ( $event['MaxScore'] > $chart['data']['y']['hi'] ) {
|
||||
$chart['data']['y']['hi'] = $event['MaxScore'];
|
||||
}
|
||||
} else {
|
||||
$framesSql = 'SELECT FrameId,Delta,unix_timestamp(TimeStamp) AS TimeT,Score FROM Frames WHERE EventId = ? AND Score > 0';
|
||||
$result = dbQuery( $framesSql, array( $event['Id'] ) );
|
||||
while( $frame = dbFetchNext( $result ) ) {
|
||||
if ( $frame['Score'] == 0 )
|
||||
continue;
|
||||
$frameTimeT = $frame['TimeT'];
|
||||
$frameTimeT = $startTimeT + $frame['Delta'];
|
||||
$frameIndex = (int)(($frameTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
if ( $frameIndex < 0 )
|
||||
continue;
|
||||
if ( $frameIndex >= $chart['graph']['width'] )
|
||||
continue;
|
||||
if ( $endIndex >= $chart['graph']['width'] )
|
||||
$endIndex = $chart['graph']['width'] - 1;
|
||||
|
||||
if ( !isset($currFrameSlots[$frameIndex]) ) {
|
||||
$currFrameSlots[$frameIndex] = array( 'count'=>1, 'value'=>$frame['Score'], 'event'=>$event, 'frame'=>$frame );
|
||||
for ( $i = $startIndex; $i <= $endIndex; $i++ ) {
|
||||
if ( !isset($currEventSlots[$i]) ) {
|
||||
if ( $rawStartIndex == $rawEndIndex ) {
|
||||
$offset = 1;
|
||||
} else {
|
||||
$currFrameSlots[$frameIndex]['count']++;
|
||||
if ( $frame['Score'] > $currFrameSlots[$frameIndex]['value'] ) {
|
||||
$currFrameSlots[$frameIndex]['value'] = $frame['Score'];
|
||||
$currFrameSlots[$frameIndex]['event'] = $event;
|
||||
$currFrameSlots[$frameIndex]['frame'] = $frame;
|
||||
$offset = 1 + ($event['Frames']?((int)(($event['Frames']-1)*(($i-$rawStartIndex)/($rawEndIndex-$rawStartIndex)))):0);
|
||||
}
|
||||
$currEventSlots[$i] = array( 'count'=>0, 'width'=>1, 'offset'=>$offset, 'event'=>$event );
|
||||
} else {
|
||||
$currEventSlots[$i]['count']++;
|
||||
}
|
||||
}
|
||||
if ( $event['MaxScore'] > 0 ) {
|
||||
if ( $startIndex == $endIndex ) {
|
||||
$framesSql = 'SELECT FrameId,Score FROM Frames WHERE EventId = ? AND Score > 0 ORDER BY Score DESC LIMIT 1';
|
||||
$frame = dbFetchOne( $framesSql, NULL, array($event['Id']) );
|
||||
|
||||
$i = $startIndex;
|
||||
if ( !isset($currFrameSlots[$i]) ) {
|
||||
$currFrameSlots[$i] = array( 'count'=>1, 'value'=>$event['MaxScore'], 'event'=>$event, 'frame'=>$frame );
|
||||
} else {
|
||||
$currFrameSlots[$i]['count']++;
|
||||
if ( $event['MaxScore'] > $currFrameSlots[$i]['value'] ) {
|
||||
$currFrameSlots[$i]['value'] = $event['MaxScore'];
|
||||
$currFrameSlots[$i]['event'] = $event;
|
||||
$currFrameSlots[$i]['frame'] = $frame;
|
||||
}
|
||||
}
|
||||
if ( $frame['Score'] > $chart['data']['y']['hi'] ) {
|
||||
$chart['data']['y']['hi'] = $frame['Score'];
|
||||
if ( $event['MaxScore'] > $chart['data']['y']['hi'] ) {
|
||||
$chart['data']['y']['hi'] = $event['MaxScore'];
|
||||
}
|
||||
} // end foreach frame
|
||||
}
|
||||
} // end if MaxScore > 0
|
||||
} // end foreach event
|
||||
} else {
|
||||
$framesSql = 'SELECT FrameId,Delta,unix_timestamp(TimeStamp) AS TimeT,Score FROM Frames WHERE EventId = ? AND Score > 0';
|
||||
$result = dbQuery( $framesSql, array( $event['Id'] ) );
|
||||
while( $frame = dbFetchNext( $result ) ) {
|
||||
if ( $frame['Score'] == 0 )
|
||||
continue;
|
||||
$frameTimeT = $frame['TimeT'];
|
||||
$frameTimeT = $startTimeT + $frame['Delta'];
|
||||
$frameIndex = (int)(($frameTimeT - $chart['data']['x']['lo']) / $chart['data']['x']['density']);
|
||||
if ( $frameIndex < 0 )
|
||||
continue;
|
||||
if ( $frameIndex >= $chart['graph']['width'] )
|
||||
continue;
|
||||
|
||||
if ( !isset($currFrameSlots[$frameIndex]) ) {
|
||||
$currFrameSlots[$frameIndex] = array( 'count'=>1, 'value'=>$frame['Score'], 'event'=>$event, 'frame'=>$frame );
|
||||
} else {
|
||||
$currFrameSlots[$frameIndex]['count']++;
|
||||
if ( $frame['Score'] > $currFrameSlots[$frameIndex]['value'] ) {
|
||||
$currFrameSlots[$frameIndex]['value'] = $frame['Score'];
|
||||
$currFrameSlots[$frameIndex]['event'] = $event;
|
||||
$currFrameSlots[$frameIndex]['frame'] = $frame;
|
||||
}
|
||||
}
|
||||
if ( $frame['Score'] > $chart['data']['y']['hi'] ) {
|
||||
$chart['data']['y']['hi'] = $frame['Score'];
|
||||
}
|
||||
} // end foreach frame
|
||||
}
|
||||
} // end if MaxScore > 0
|
||||
} while( $event = $events_result->fetch( PDO::FETCH_ASSOC ) );
|
||||
} # end if have first event
|
||||
|
||||
ksort( $monitorIds, SORT_NUMERIC );
|
||||
ksort( $monEventSlots, SORT_NUMERIC );
|
||||
@@ -707,7 +717,7 @@ xhtmlHeaders(__FILE__, translate('Timeline') );
|
||||
?>
|
||||
<!--
|
||||
<video id="preview" width="100%" controls crossorigin="anonymous">
|
||||
<source src="<?php echo getEventDefaultVideoPath($event); ?>" type="video/mp4">
|
||||
<source src="<?php echo getEventDefaultVideoPath($first_event); ?>" type="video/mp4">
|
||||
Your browser does not support the video tag.
|
||||
</video>
|
||||
o-->
|
||||
@@ -854,6 +864,6 @@ foreach( array_keys($monEventSlots) as $monitorId ) {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
|
||||
<script src="skins/<?php echo $skin ?>/js/moment.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user