diff --git a/cms/stats.php b/cms/stats.php index 81115a7..2b8f761 100644 --- a/cms/stats.php +++ b/cms/stats.php @@ -1,343 +1,133 @@ UTC_DATE() AND duration <> 0"; +if ($result = mysqli_query($connection, $ep_retrieve)) { + $data=mysqli_fetch_assoc($result); + $num_future_shows = intval( $data['num_future_shows'] ); +} + +// -------------------------------------------- +// Shows in the Reserve Queue + +$ep_retrieve = "SELECT COUNT(*) as num_reserve_shows FROM reservations WHERE status='RESERVE_SHOW_SUBMITTED'"; +if ($result = mysqli_query($connection, $ep_retrieve)) { + $data=mysqli_fetch_assoc($result); + $num_reserve_shows = intval( $data['num_reserve_shows'] ); +} // -------------------------------------------- // Get the number of hosts -$ep_retrieve = "SELECT hostid FROM hosts WHERE valid = '1' ORDER BY hostid ASC"; -$num_of_hosts = "1"; +$ep_retrieve = "SELECT COUNT( DISTINCT hostid ) as num_hosts FROM hosts WHERE valid = '1'"; if ($result = mysqli_query($connection, $ep_retrieve)) { - while ($row = mysqli_fetch_array($result)) { - $hostid = $row['hostid']; - $last_show = mysqli_query($connection, "SELECT max(date) from eps WHERE hostid='$hostid' AND valid = '1'"); - $last_show_date = mysqli_fetch_row($last_show); - if (!empty($last_show_date[0])) { - $num_of_hosts++; - } - } + $data=mysqli_fetch_assoc($result); + $num_hosts = intval( $data['num_hosts'] ); } // -------------------------------------------- -// Get first free slot +// Get the next free slot -$query = mysqli_query($connection, "SELECT id + 1 FROM eps mo -WHERE NOT EXISTS - ( - SELECT NULL - FROM eps mi - WHERE mi.id = mo.id + 1 - ) -ORDER BY - id -LIMIT 1"); -$next_show_num_array = mysqli_fetch_row($query); -$next_show_num = $next_show_num_array[0]; - -// -------------------------------------------- -// Get latest published show - -$query = mysqli_query($connection, "SELECT max(date), max(id) from eps WHERE eps.date <= UTC_DATE()"); -$current_episode_array = mysqli_fetch_row($query); -$current_episode_date = $current_episode_array[0]; -$current_episode_number = $current_episode_array[1]; - -// -------------------------------------------- -// Populate array with future shows -$un_delivered = -1; -$days_to_undelivered = 0; -$show_array = array (); -$ep_retrieve = "SELECT hosts.host, eps.id, eps.title, eps.date FROM eps, hosts WHERE eps.valid=1 AND eps.hostid = hosts.hostid AND eps.date >= '$current_episode_date' ORDER BY date DESC"; -if ($result = mysqli_query($connection, $ep_retrieve)) { - while ($row = mysqli_fetch_array($result)) { - $id = $row['id']; - $id = fixid($id); - $date = $row['date']; - $title = $row['title']; - $host = $row['host']; - if ( file_exists("./eps/hpr$id.ogg") and file_exists("./eps/hpr$id.spx") and file_exists("./eps/hpr$id.mp3") ) { - $delivered = 1; - if ($un_delivered === -1 ) { - $days_to_undelivered++; - } - } - else { - $delivered = 0; - $un_delivered = $days_to_undelivered; - } - $show_array[$id] = array ( "date" => $date, - "title" => $title, - "host" => $host, - "delivered" => $delivered - ); - } -} - -// -------------------------------------------- -// Calculate the time to the next show - -$next_show_date = date('Y-m-d', strtotime($show_array[$next_show_num - 1 ]["date"] . ' + 1 weekday')); -$days_to_wait = floor((strtotime($next_show_date) - strtotime(gmdate('Y-m-d')))/(60*60*24)); - -// -------------------------------------------- -// Future Hosts -$ep_retrieve = "SELECT DISTINCT hostid FROM eps WHERE eps.date > UTC_DATE()"; - -// $ep_retrieve = "SELECT id, type, date, title, notes, host, hostid FROM eps WHERE valid = '1' ORDER BY id DESC LIMIT 10"; -if ($result = mysqli_query($connection, $ep_retrieve)) { - $num_future_hosts = mysqli_num_rows($result); -} - -// -------------------------------------------- -// Shows in the Queue -$ep_retrieve = "SELECT DISTINCT id FROM eps WHERE eps.date > UTC_DATE() AND duration <> 0"; - -// $ep_retrieve = "SELECT id, type, date, title, notes, host, hostid FROM eps WHERE valid = '1' ORDER BY id DESC LIMIT 10"; -if ($result = mysqli_query($connection, $ep_retrieve)) { - $num_future_shows = mysqli_num_rows($result); -} - -// -------------------------------------------- -// Shows in the Queue -$result=mysqli_query($connection, "SELECT count(*) as total FROM `reservations` WHERE `status` LIKE 'SHOW_SUBMITTED' ORDER BY `ip` ASC "); -$data=mysqli_fetch_assoc($result); -$num_submitted_shows = $data['total']; - -// -------------------------------------------- -// Duration of all shows -$result=mysqli_query($connection, "SELECT SUM(duration) as total_playtime FROM `eps`"); -$data=mysqli_fetch_assoc($result); -$total_playtime = $data['total_playtime']; -$human_total_playtime = convertSecToTime($total_playtime); - -// -------------------------------------------- -// workflow - -$ep_retrieve = "SELECT status, COUNT(*) AS total FROM reservations WHERE status != 'RESERVE_SHOW_SUBMITTED' GROUP BY status;"; - -$workflow="\"workflow\": {"; -if ($result = mysqli_query($connection, $ep_retrieve)) { - while ($row = mysqli_fetch_array($result)) { - $status = $row['status']; - $total = $row['total']; - $workflow=$workflow." - \"$status\": \"$total\","; - } -} - $workflow=$workflow." - \"RESERVE_SHOW_SUBMITTED\": \"$reserve_shows\" - },"; +$next_free_slot = "https://repo.anhonesthost.net/HPR/hpr_hub/issues/71"; // -------------------------------------------- // playtime -$result=mysqli_query($connection, "SELECT SUM(duration) as total_playtime FROM `eps`"); -$data=mysqli_fetch_assoc($result); -$total_playtime = $data['total_playtime']; -$human_total_playtime = convertSecToTime($total_playtime); +$ep_retrieve = "SELECT SUM(duration) as total_playtime_all_hpr_shows_seconds FROM `eps`"; +if ($result = mysqli_query($connection, $ep_retrieve)) { + $data=mysqli_fetch_assoc($result); + $total_playtime_all_hpr_shows_seconds = intval( $data['total_playtime_all_hpr_shows_seconds'] ); + $total_playtime_all_shows_seconds = $twt_duration + $total_playtime_all_hpr_shows_seconds; +} + +$total_playtime_all_shows_human_readable = convertSecToTime( $total_playtime_all_shows_seconds ); // -------------------------------------------- -// Unprocessed comments -$comment_directory = "/home/hpr/comments"; +// Comments + $unprocessed_comments = iterator_count(new FilesystemIterator("$comment_directory", FilesystemIterator::SKIP_DOTS)); // -------------------------------------------- -// Shows on the FTP server +// Calculations -$new_shows=0; -if ($handle = opendir('/home/hpr/upload')) { - while (false !== ($entry = readdir($handle))) { - if ( $entry != "." && $entry != "..") { - $new_shows++; - } +$total_released_shows = $latest_episode_id + $total_twt_shows; +$total_submitted_shows = $latest_episode_id + $total_twt_shows + $num_future_shows + $num_reserve_shows; + +$project_age_seconds = strtotime( $start_date_twt ) - $current_time; +$project_age = convertSecToTime( $project_age_seconds ); + + +// -------------------------------------------- +// Display the workflow + +$workflow = array(); + +$ep_retrieve = "SELECT status, COUNT(*) AS total FROM reservations WHERE status != 'RESERVE_SHOW_SUBMITTED' GROUP BY status;"; +if ($result = mysqli_query($connection, $ep_retrieve)) { + while ($row = mysqli_fetch_array($result)) { + $workflow[ $row['status'] ] = $row['total']; } - closedir($handle); } // -------------------------------------------- -// Calculate Total Shows - - -$total_shows = $current_episode_number + $total_twt_shows + $num_future_shows + $reserve_shows; +// Shows in the Reserve Queue +$ep_retrieve = "SELECT COUNT(*) AS num_unprocessed_shows FROM reservations WHERE status!='RESERVE_SHOW_SUBMITTED' AND status!='REQUEST_UNVERIFIED'"; +if ($result = mysqli_query($connection, $ep_retrieve)) { + $data=mysqli_fetch_assoc($result); + $num_unprocessed_shows = intval( $data['num_unprocessed_shows'] ); +} // -------------------------------------------- -// Produce output +// Display the results -$current_time = time(); +$arr = array( + 'stats_generated' => $current_time, + 'start_date_twt' => $start_date_twt, + 'rename_date_hpr' => $rename_date_hpr, + 'latest_episode_release_date' => $latest_episode_release_date, + 'project_age' => $project_age, + 'latest_episode_id' => $latest_episode_id, + 'total_twt_shows' => $total_twt_shows, + 'total_released_shows' => $total_released_shows, + 'num_future_shows' => $num_future_shows, + 'num_reserve_shows' => $num_reserve_shows, + 'total_submitted_shows' => $total_submitted_shows, + 'num_hosts' => $num_hosts, + 'days_to_next_free_slot' => "todo", + 'total_playtime_all_shows_seconds' => $total_playtime_all_shows_seconds, + 'total_playtime_all_shows_human_readable' => $total_playtime_all_shows_human_readable, + 'next_free_slot' => $next_free_slot, + 'unprocessed_comments' => $unprocessed_comments, + 'num_unprocessed_shows' => $num_unprocessed_shows, + 'show_processing_workflow' => $workflow +); + +header('Content-Type: application/json'); +header("Content-disposition: inline; filename=hpr_stats.json"); + +echo json_encode($arr); -if ($format === "json") { - header('Content-Type: application/json'); - header("Content-disposition: inline; filename=hpr_stats.json"); - echo "{ - \"stats_generated\": ".$current_time.", - \"age\": { - \"start\": \"2005-09-19T00:00:00Z\", - \"rename\": \"2007-12-31T00:00:00Z\", - \"since_start\": { - \"total_seconds\": ".$agetwt.", - \"years\": ".$twt_years.", - \"months\": ".$twt_months.", - \"days\": ".$twt_days." - }, - \"since_rename\": { - \"total_seconds\": ".$agehpr.", - \"years\": ".$hpr_years.", - \"months\": ".$hpr_months.", - \"days\": ".$hpr_days." - } - }, - \"shows\": { - \"total\": ".$total_shows.", - \"twt\": $total_twt_shows, - \"hpr\": ".$current_episode_number.", - \"future\": ".$num_future_shows.", - \"reserve\": ".$reserve_shows.", - \"playtime\": ".$total_playtime.", - \"human_playtime\": \"".$human_total_playtime."\" - }, - \"hosts\": ".$num_of_hosts.", - \"slot\": { - \"next_free\": ".$days_to_wait.", - \"no_media\": ".$un_delivered." - }, - $workflow - \"queue\": { - \"number_future_hosts\": ".$num_future_hosts.", - \"number_future_shows\": ".$num_future_shows.", - \"unprocessed_comments\": ".$unprocessed_comments.", - \"submitted_shows\": ".$num_submitted_shows.", - \"shows_in_workflow\": ".$new_shows.", - \"reserve\": ".$reserve_shows." - } -} -"; -} -elseif ($format === "xml") { - header("Content-type: application/xml"); - header("Content-disposition: inline; filename=hpr_stats.xml"); - echo " - - ".$current_time." - - 2005-09-19T00:00:00Z - 2007-12-31T00:00:00Z - - ".$agetwt." - ". $twt_years." - ".$twt_months." - ".$twt_days." - - - ".$agehpr." - ".$hpr_years." - ".$hpr_months." - ".$hpr_days." - - - - ".$total_shows." - $total_twt_shows - ".$total_hpr_shows." - ".$total_playtime." - ".$human_total_playtime." - - ".$num_of_hosts." - - ".$days_to_wait." - ".$un_delivered." - - - ".$num_future_hosts." - ".$num_future_shows." - ".$unprocessed_comments." - ".$num_submitted_shows." - ".$new_shows." - ".$reserve_shows." - -"; -} -elseif ($format === "csv") { - header("Content-type: text/csv"); - header("Content-disposition: inline; filename=hpr_stats.csv"); - - print "stats_generated,age_start,age_rename,age_since_start_total_seconds,age_since_start_years,age_since_start_months,age_since_start_days,age_since_rename_total_seconds,age_since_rename_years,age_since_rename_months,age_since_rename_days,shows_total,shows_twt,shows_hpr,hosts,slot_next_free,slot_no_media,number_future_hosts,number_future_shows,unprocessed_comments,shows_in_workflow,queue_reserve,playtime\n"; - print "${current_time},2005-09-19T00:00:00Z,2007-12-31T00:00:00Z,${agetwt},${twt_years},${twt_months},${twt_days},${agehpr},${hpr_years},${hpr_months},${hpr_days},${totalshows},${total_twt_shows},${$total_hpr_shows},${num_of_hosts},${days_to_wait},${un_delivered},${num_future_hosts},${num_future_shows},${unprocessed_comments},${new_shows},${reserve_shows},${total_playtime}\n"; - -} -else { - Header('Content-type: text/tab-separated-values'); - header("Content-disposition: inline; filename=hpr_stats.txt"); - printf("Started:\t%d years, %d months, %d days ago (2005-09-19)\n", $twt_years, $twt_months, $twt_days); - printf("Renamed HPR:\t%d years, %d months, %d days ago (2007-12-31)\n", $hpr_years, $hpr_months, $hpr_days); - echo "Total Shows:\t" . $total_shows . "\n"; - echo "Total TWAT:\t$total_twt_shows\n"; - echo "Total HPR:\t" . $total_hpr_shows . "\n"; - echo "Duration:\t" . $total_playtime . "\n"; - echo "Human Duration:\t" . $human_total_playtime . "\n"; - echo "HPR Hosts:\t${num_of_hosts}\n"; - echo "Days to next free slot:\t${days_to_wait}\n"; - echo "Hosts in Queue:\t$num_future_hosts\n"; - echo "Shows in Queue:\t$num_future_shows\n"; - echo "Comments waiting approval:\t$unprocessed_comments\n"; - echo "Files on the FTP Server:\t$new_shows\n"; - echo "Number of Reserve Shows:\t$reserve_shows\n"; - echo "Days until show without media:\t$un_delivered\n"; - print "$current_time,$agetwt,$agehpr,$total_shows,$total_twt_shows,$total_hpr_shows,$num_of_hosts,$days_to_wait,$num_future_hosts,$num_future_shows,$unprocessed_comments,$new_shows,$reserve_shows,$un_delivered"; - // print_r($show_array); -} mysqli_close($connection); ?> +