/** * Function that when implemented by a derived * class should return an object that can be * json encoded and returned to the UI to * provide analytical information about the * underlying data. * * @param \Swiftriver\Core\Analytics\AnalyticsRequest $parameters * @return \Swiftriver\Core\Analytics\AnalyticsRequest */ public function ProvideAnalytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [Method Invoked]", \PEAR_LOG_DEBUG); $parameters = $request->Parameters; $yearDay = (int) \date('z'); $timeLimit = 5; if (\is_array($parameters)) { if (\key_exists("TimeLimit", $parameters)) { $timeLimit = (int) $parameters["TimeLimit"]; } } $currentDay = $yearDay; $days = ""; while ($currentDay > 0 && $yearDay - $currentDay < $timeLimit) { $days .= "'{$currentDay}',"; $currentDay = $currentDay - 1; } $days = \rtrim($days, ','); $sql = "SELECT \n DAYOFYEAR(FROM_UNIXTIME(s.date)) as dayoftheyear,\n count(s.id) as numberofsources,\n ch.id as channelId,\n ch.json as channelJson\n FROM \n SC_Sources s JOIN SC_Channels ch ON s.channelId = ch.id\n WHERE\n DAYOFYEAR(FROM_UNIXTIME(s.date)) in ({$days})\n GROUP BY\n channelId, dayoftheyear"; try { $db = parent::PDOConnection($request); if ($db == null) { return $request; } $statement = $db->prepare($sql); $result = $statement->execute(); if ($result == false) { $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $errorCollection = $statement->errorInfo(); $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [" . $errorCollection[2] . "]", \PEAR_LOG_ERR); return $request; } $request->Result = array(); foreach ($statement->fetchAll() as $row) { $entry = array("dayOfTheYear" => $this->DayOfYear2Date($row["dayoftheyear"]), "numberOfSources" => $row["numberofsources"], "channelId" => $row["channelId"]); $request->Result[] = $entry; } } catch (\PDOException $e) { $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [{$e}]", \PEAR_LOG_ERR); } $logger->log("Swiftriver::AnalyticsProviders::SourcesByChannelOverTimeAnalyticsProvider::ProvideAnalytics [Method finished]", \PEAR_LOG_DEBUG); return $request; }
function mongo_analytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $request->Result = null; $tag_array = array(); $limit = 20; $parameters = $request->Parameters; if (\is_array($parameters)) { if (\key_exists("Limit", $parameters)) { $limit = (int) $parameters["Limit"]; } } $logger->log("Swiftriver::AnalyticsProviders::TotalTagPopularityAnalyticsProvider::ProvideAnalytics [Set limit {$limit}]", \PEAR_LOG_INFO); try { $db = parent::PDOConnection($request); $content_tags = $db->get("content_tags"); foreach ($content_tags as $content_tag) { $tags = $db->get_where('tags', array('id' => $content_tag["tagId"])); foreach ($tags as $tag) { if (!\in_array($tag["text"], $tag_array)) { $tag_array[$tag["text"]] = array("tag" => $tag["text"], "count" => 1); } else { $tag_array[$tag["text"]]["count"] += 1; } } } } catch (\MongoException $e) { $logger->log("Swiftriver::AnalyticsProviders::TotalTagPopularityAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::TotalTagPopularityAnalyticsProvider::ProvideAnalytics [{$e}]", \PEAR_LOG_ERR); } $sorted_tag_array = $this->mongo_array_sort($tag_array, "count"); $num_items = 1; foreach ($sorted_tag_array as $tag_item) { if ($num_items > $limit) { continue; } if ($request->Result == null) { $request->Result = array(); } $request->Result[] = $tag_item; $num_items++; } return $request; }
/** * Function that when implemented by a derived * class should return an object that can be * json encoded and returned to the UI to * provide analytical information about the * underlying data. * * @param \Swiftriver\Core\Analytics\AnalyticsRequest $parameters * @return \Swiftriver\Core\Analytics\AnalyticsRequest */ public function ProvideAnalytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [Method Invoked]", \PEAR_LOG_DEBUG); $parameters = $request->Parameters; $yearDay = (int) \date('z'); $timeLimit = 5; if(\is_array($parameters)) if(\key_exists("TimeLimit", $parameters)) $timeLimit = (int) $parameters["TimeLimit"]; $currentDay = $yearDay; $days = ""; while (($currentDay > 0) && (($yearDay - $currentDay) < $timeLimit)) { $days .= "'$currentDay',"; $currentDay = $currentDay - 1; } $days = \rtrim($days, ','); $sql = "SELECT DAYOFYEAR(FROM_UNIXTIME(c.date)) as dayoftheyear, count(c.id) as numberofcontentitems, ch.id as channelId, ch.json as channelJson FROM SC_Content c JOIN SC_Sources s ON c.sourceId = s.id JOIN SC_Channels ch ON s.channelId = ch.id WHERE DAYOFYEAR(FROM_UNIXTIME(c.date)) in ($days) GROUP BY channelId, dayoftheyear"; try { $db = parent::PDOConnection($request); if($db == null) return $request; $statement = $db->prepare($sql); $result = $statement->execute(); if($result == false) { $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $errorCollection = $statement->errorInfo(); $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [" . $errorCollection[2] . "]", \PEAR_LOG_ERR); return $request; } $request->Result = array(); foreach($statement->fetchAll() as $row) { $channel_name = ""; $entry_json_decoded = json_decode($row["channelJson"]); if(isset($entry_json_decoded->name)) { $channel_name = $entry_json_decoded->name; } $entry = array( "dayOfTheYear" => $this->DayOfYear2Date($row["dayoftheyear"]), "numberOfContentItems" => $row["numberofcontentitems"], "channelId" => $row["channelId"], "channelName" => $channel_name); $request->Result[] = $entry; } } catch(\PDOException $e) { $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [$e]", \PEAR_LOG_ERR); } $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [Method finished]", \PEAR_LOG_DEBUG); return $request; }
function mongo_analytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $parameters = $request->Parameters; $yearDay = (int) \date('z'); $timeLimit = 5; if (\is_array($parameters)) { if (\key_exists("TimeLimit", $parameters)) { $timeLimit = (int) $parameters["TimeLimit"]; } } $currentDay = $yearDay; $days = array(); $days[] = $currentDay + 1; while ($currentDay > 0 && $yearDay - $currentDay < $timeLimit) { $days[] = $currentDay; $currentDay = $currentDay - 1; } $channel_array = array(); $request->Result = null; try { $db_content = parent::PDOConnection($request); $db_sources = parent::PDOConnection($request); $db_channels = parent::PDOConnection($request); $db_content->where_in("date_day_of_year", $days); $content_items = $db_content->get("content"); $channel_array = array(); foreach ($content_items as $content_item) { $source_id = $content_item["source"]["id"]; $source_items = $db_sources->get_where("sources", array("id" => $source_id)); foreach ($source_items as $source_item) { $channel_id = $source_item["channelId"]; if (!\in_array($channel_id, $channel_array)) { $channel_array[$channel_id] = array(); } $channels = $db_channels->get_where("channels", array("id" => $channel_id)); foreach ($channels as $channel) { if (!\in_array($content_item->date_day_of_year, $channel_array[$channel_id])) { $channel_array[$channel_id][$content_item->date_day_of_year] = array(); } $channel_array[$channel_id][$content_item["date_day_of_year"]]["channelId"] = $channel_id; $channel_array[$channel_id][$content_item["date_day_of_year"]]["channelName"] = $channel["name"]; if (!\in_array($channel_id, $channel_array[$channel_id][$content_item["date_day_of_year"]]["numberOfContentItems"])) { $channel_array[$channel_id][$content_item["date_day_of_year"]]["numberOfContentItems"] = 1; } else { $channel_array[$channel_id][$content_item["date_day_of_year"]]["numberOfContentItems"] += 1; } $channel_array[$channel_id][$content_item["date_day_of_year"]]["dayOfTheYear"] = $content_item["date_day_of_year"]; } } } } catch (\MongoException $e) { $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [{$e}]", \PEAR_LOG_ERR); } foreach ($channel_array as $channel_array_item) { foreach ($channel_array_item as $channel_array_item_day) { if ($request->Result == null) { $request->Result = array(); } $request->Result[] = $channel_array_item_day; } } return $request; }
function mongo_analytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $parameters = $request->Parameters; $yearDay = (int) \date('z'); $timeLimit = 5; if (\is_array($parameters)) { if (\key_exists("TimeLimit", $parameters)) { $timeLimit = (int) $parameters["TimeLimit"]; } } $date = \strtotime("-{$timeLimit} days"); $channel_array = array(); $request->Result = null; try { $db_content = parent::PDOConnection($request); $db_sources = parent::PDOConnection($request); $db_channels = parent::PDOConnection($request); $db_content->where(array("date" => array('$gte' => $date))); $content_items = $db_content->get("content"); $logger->log("Swiftriver::AnalyticsProviders::TotalContentByChannelAnalyticsProvider::ProvideAnalytics [Selected date: {$date}]", \PEAR_LOG_INFO); $logger->log("Swiftriver::AnalyticsProviders::TotalContentByChannelAnalyticsProvider::ProvideAnalytics [" . \count($content_items) . " number of content items retrieved]", \PEAR_LOG_INFO); $channel_array = array(); foreach ($content_items as $content_item) { $source_id = $content_item["source"]["id"]; $source_items = $db_sources->get_where("sources", array("id" => $source_id)); $logger->log("Swiftriver::AnalyticsProviders::TotalContentByChannelAnalyticsProvider::ProvideAnalytics [" . \count($source_items) . " number of source items retrieved]", \PEAR_LOG_INFO); foreach ($source_items as $source_item) { $channel_id = $source_item["channelId"]; if (!\in_array($channel_id, $channel_array)) { $channel_array[$channel_id] = array(); } $channels = $db_channels->get_where("channels", array("id" => $channel_id)); $logger->log("Swiftriver::AnalyticsProviders::TotalContentByChannelAnalyticsProvider::ProvideAnalytics [" . \count($channels) . " number of channels retrieved]", \PEAR_LOG_INFO); foreach ($channels as $channel) { $channel_array[$channel_id]["channelId"] = $channel_id; $channel_array[$channel_id]["channelName"] = $channel["name"]; if (!\in_array($channel_id, $channel_array[$channel_id]["numberOfContentItems"])) { $channel_array[$channel_id]["numberOfContentItems"] = 1; } else { $channel_array[$channel_id]["numberOfContentItems"] += 1; } $channel_array[$channel_id]["channelType"] = $content_item["source"]["type"]; $channel_array[$channel_id]["channelSubType"] = $content_item["source"]["subType"]; } } } } catch (\MongoException $e) { $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::ContentByChannelOverTimeAnalyticsProvider::ProvideAnalytics [{$e}]", \PEAR_LOG_ERR); } foreach ($channel_array as $channel_array_item) { if ($request->Result == null) { $request->Result = array(); } $request->Result[] = $channel_array_item; } return $request; }
private function mongo_analytics($request) { $logger = \Swiftriver\Core\Setup::GetLogger(); $request->Result = null; try { $db = parent::PDOConnection($request); $content = $db->get("content"); $content_date = null; $content_statistics = array(); $array_index = -1; $accumulated_total = 0; $date = null; foreach ($content as $content_item) { $timestamp = $content_item["date"]; $content_item_day_of_year = \date('z', $timestamp); if ($content_date != $content_item_day_of_year) { $content_date = $content_item_day_of_year; if ($array_index > -1) { // Add statistics $content_statistics[] = array("date" => $date, "accumulatedtotal" => $accumulated_total); } $accumulated_total = 0; $array_index++; } else { $accumulated_total++; } // Get the date for the new entry $date = \date("d-m-Y", $timestamp); } if ($request->Result == null) { $request->Result = array(); } $request->Result[] = $content_statistics; } catch (\MongoException $e) { $logger->log("Swiftriver::AnalyticsProviders::AccumulatedContentOverTimeAnalyticsProvider::ProvideAnalytics [An exception was thrown]", \PEAR_LOG_ERR); $logger->log("Swiftriver::AnalyticsProviders::AccumulatedContentOverTimeAnalyticsProvider::ProvideAnalytics [{$e}]", \PEAR_LOG_ERR); } return $request; }