Hello @david.eusse,
If correct logs are stored the “kalturadw.dwh_fact_events” table, you may be able to use same script.
For reference, here is the script we created.
<?php
$dbhost = $argv[1];
$dbport = $argv[2];
$dbuser = $argv[3];
$dbpassword = $argv[4];
$usage_file = $argv[5];
$custom_update = 0; // If plays/views are updated by the Kaltura system, set to 0. Otherwise, set to 1.
$link = mysql_connect($dbhost . ':' . $dbport , $dbuser, $dbpassword);
if (!$link) {
die('Cannot connection to Kaltura database.'. mysql_error() . PHP_EOL);
}
else {
echo "Connect to Kaltura database." . PHP_EOL;
}
$yesterday = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$yesterday = $yesterday . " 00:00:00";
$today = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")));
$today = $today . " 00:00:00";
$update_array = array();
$daily_plays = 0;
$daily_views = 0;
$view_sql = "select entry_id,count(event_type_id) from kalturadw.dwh_fact_events where event_type_id='2' and event_time>='" . $yesterday . "' and event_time<'" . $today . "' group by entry_id";
$result = mysql_query($view_sql);
if (!$result) {
die('ERRO: cannot get entry views. : ' . mysql_error() . PHP_EOL);
}
while ($row = mysql_fetch_assoc($result)) {
$update_array += array($row['entry_id'] => array('views'=> $row['count(event_type_id)'] , 'plays' => 0, 'last_played_at' => null));
$daily_views += $row['count(event_type_id)'];
}
$play_sql = "select entry_id,count(event_type_id),max(event_time) from kalturadw.dwh_fact_events where event_type_id='3' and event_time>='" . $yesterday . "' and event_time<'" . $today . "' group by entry_id";
$result = mysql_query($play_sql);
if (!$result) {
die('ERROR: cannot get entry plays : ' . mysql_error() . PHP_EOL);
}
while ($row = mysql_fetch_assoc($result)) {
if ($update_array[$row['entry_id']] == null) {
$update_array += array($row['entry_id'] => array('views' => 0, 'plays' => $row['count(event_type_id)']), 'last_played_at' => $row['max(event_time)']);
}
else {
$update_array[$row['entry_id']]['plays'] = $row['count(event_type_id)'];
$update_array[$row['entry_id']]['last_played_at'] = $row['max(event_time)'];
}
$daily_plays += $row['count(event_type_id)'];
}
$update_entries = 0;
foreach ($update_array as $entry_id => $playsViews) {
if ($custom_update == 0) {
$update_entries += 1;
}
else {
$update_sql = "update kaltura.entry set plays=plays+" . $playsViews['plays'] . ",views=views+" . $playsViews['views'];
if ($playsViews['last_played_at'] != null) {
$update_sql .= ",last_played_at='" . $playsViews['last_played_at'] . "'";
}
$update_sql .= " where id='" . $entry_id . "'";
$result = mysql_query($update_sql);
if ($result) {
$update_entries += 1;
}
}
}
echo $update_entries . " entries' plays/views has been updated." . PHP_EOL;
$bandwidth_usage = 0;
$added_storage = 0;
$deleted_storage = 0;
$yesterday = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$bandwidth_sql = "select sum(count_bandwidth_kb),sum(added_storage_mb),sum(deleted_storage_mb) from kalturadw.dwh_hourly_partner_usage where date_id='" . $yesterday . "'";
$result = mysql_query($bandwidth_sql);
if (!$result) {
die('ERROR: cannot get entry plays : ' . mysql_error() . PHP_EOL);
}
while ($row = mysql_fetch_assoc($result)) {
$bandwidth_usage += $row['sum(count_bandwidth_kb)'];
$added_storage += $row['sum(added_storage_mb)'];
$deleted_storage += $row['sum(deleted_storage_mb)'];
}
$bandwidth_usage /= 1000;
$contents = 0;
$contents_sql = "select count(id) from kaltura.entry where status='2' and source='1' and puser_id != '' and categories != '' and conversion_profile_id != ''";
$result = mysql_query($contents_sql);
if (!$result) {
die('ERROR: cannot get entries : ' . mysql_error() . PHP_EOL);
}
while ($row = mysql_fetch_assoc($result)) {
$contents += $row['count(id)'];
}
$usage_date = date("Ymd", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$insert_sql = "";
$insert_sql .= "insert into customlog.daily_usage (date_id, contents, plays, views, bandwidth_usage, added_storage, deleted_storage) values(";
$insert_sql .= "'" . $usage_date . "',";
$insert_sql .= "'" . $contents . "',";
$insert_sql .= "'" . $daily_plays . "',";
$insert_sql .= "'" . $daily_views . "',";
$insert_sql .= "'" . $bandwidth_usage . "',";
$insert_sql .= "'" . $added_storage . "',";
$insert_sql .= "'" . $deleted_storage . "'";
$insert_sql .= ")";
$result = mysql_query($insert_sql);
if (!$result) {
die('ERROR: cannot insert daily usage : ' . mysql_error() . PHP_EOL);
}
$usage_date = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 1, date("Y")));
$write_string = '';
$write_string .= "Daily Usage on " . $usage_date . " :" . PHP_EOL;
$write_string .= " " . $contents . " contents" . PHP_EOL;
$write_string .= " " . $daily_plays . " plays, " . $daily_views . " views" . PHP_EOL;
$write_string .= " Bandwidth Usage " . $bandwidth_usage . " MB" . PHP_EOL;
$write_string .= " Added Storeage " . $added_storage . " MB, Deleted Storage " . $deleted_storage . " MB" . PHP_EOL;
$close_flag = mysql_close($link);
if ($close_flag) {
echo "Kaltura server has been closed safely." . PHP_EOL;
}
else {
echo "Kaltura server has been closed unsafely." . PHP_EOL;
}
file_put_contents($usage_file, $write_string, FILE_APPEND | LOCK_EX);
?>
This script gets the logs from database and updates plays/views of each media entry.
And, this script writes a record to “customlog.daily_usage” table, and writes result messages.
The “customlog.daily_usage” table is our original.
If you use this script, please delete unnecessary statements.
Regards