summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexis Degrugillier <github@ainw.org> 2014-09-29 18:54:03 -0400
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2014-10-09 16:00:15 +0200
commit57d4914bf81f3380fe55fa06b7b312f1c463e3e3 (patch)
tree82e34de811ef3a9885bdfb7a5a2c9de70a384291 /app
parent0965aecefef0fa1e67e649d24c6d4b3ba0e143c1 (diff)
Add an average per day for the 30 day period
Conflicts: app/views/stats/index.phtml
Diffstat (limited to 'app')
-rw-r--r--app/Controllers/statsController.php1
-rw-r--r--app/Models/StatsDAO.php27
-rw-r--r--app/Models/StatsDAOSQLite.php23
-rw-r--r--app/views/stats/index.phtml7
4 files changed, 53 insertions, 5 deletions
diff --git a/app/Controllers/statsController.php b/app/Controllers/statsController.php
index 256543f37..3069be34d 100644
--- a/app/Controllers/statsController.php
+++ b/app/Controllers/statsController.php
@@ -21,6 +21,7 @@ class FreshRSS_stats_Controller extends Minz_ActionController {
Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js')));
$this->view->repartition = $statsDAO->calculateEntryRepartition();
$this->view->count = $statsDAO->calculateEntryCount();
+ $this->view->average = $statsDAO->calculateEntryAverage();
$this->view->feedByCategory = $statsDAO->calculateFeedByCategory();
$this->view->entryByCategory = $statsDAO->calculateEntryByCategory();
$this->view->topFeed = $statsDAO->calculateTopFeed();
diff --git a/app/Models/StatsDAO.php b/app/Models/StatsDAO.php
index 40505ab3e..08dd4cd5c 100644
--- a/app/Models/StatsDAO.php
+++ b/app/Models/StatsDAO.php
@@ -80,6 +80,27 @@ SQL;
}
/**
+ * Calculates entry average per day on a 30 days period.
+ *
+ * @return integer
+ */
+ public function calculateEntryAverage() {
+ $period = self::ENTRY_COUNT_PERIOD;
+
+ // Get stats per day for the last 30 days
+ $sql = <<<SQL
+SELECT COUNT(1) / {$period} AS average
+FROM {$this->prefix}entry AS e
+WHERE FROM_UNIXTIME(e.date, '%Y%m%d') BETWEEN DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -{$period} DAY), '%Y%m%d') AND DATE_FORMAT(DATE_ADD(NOW(), INTERVAL -1 DAY), '%Y%m%d')
+SQL;
+ $stm = $this->bd->prepare($sql);
+ $stm->execute();
+ $res = $stm->fetch(PDO::FETCH_NAMED);
+
+ return round($res['average'], 2);
+ }
+
+ /**
* Initialize an array for the entry count.
*
* @return array
@@ -160,7 +181,7 @@ SQL;
public function calculateEntryAveragePerFeedPerHour($feed = null) {
return $this->calculateEntryAveragePerFeedPerPeriod(1/24, $feed);
}
-
+
/**
* Calculates the average number of article per day of week per feed
*
@@ -180,10 +201,10 @@ SQL;
public function calculateEntryAveragePerFeedPerMonth($feed = null) {
return $this->calculateEntryAveragePerFeedPerPeriod(30, $feed);
}
-
+
/**
* Calculates the average number of article per feed
- *
+ *
* @param float $period number used to divide the number of day in the period
* @param integer $feed id
* @return integer
diff --git a/app/Models/StatsDAOSQLite.php b/app/Models/StatsDAOSQLite.php
index 3b1256de1..bb2336532 100644
--- a/app/Models/StatsDAOSQLite.php
+++ b/app/Models/StatsDAOSQLite.php
@@ -34,6 +34,29 @@ SQL;
return $this->convertToSerie($count);
}
+ /**
+ * Calculates entry average per day on a 30 days period.
+ *
+ * @return integer
+ */
+ public function calculateEntryAverage() {
+ $period = self::ENTRY_COUNT_PERIOD;
+
+ // Get stats per day for the last 30 days
+ $sql = <<<SQL
+SELECT COUNT(1) / {$period} AS average
+FROM {$this->prefix}entry AS e
+WHERE strftime('%Y%m%d', e.date, 'unixepoch')
+ BETWEEN strftime('%Y%m%d', 'now', '-{$period} days')
+ AND strftime('%Y%m%d', 'now', '-1 day')
+SQL;
+ $stm = $this->bd->prepare($sql);
+ $stm->execute();
+ $res = $stm->fetch(PDO::FETCH_NAMED);
+
+ return round($res['average'], 2);
+ }
+
protected function calculateEntryRepartitionPerFeedPerPeriod($period, $feed = null) {
if ($feed) {
$restrict = "WHERE e.id_feed = {$feed}";
diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml
index bbdcfaec8..37803f2f9 100644
--- a/app/views/stats/index.phtml
+++ b/app/views/stats/index.phtml
@@ -91,6 +91,10 @@ function initStats() {
return;
}
// Entry per day
+ var avg = [];
+ for (var i = -31; i <= 0; i++) {
+ avg.push([i, <?php echo $this->average?>]);
+ }
Flotr.draw(document.getElementById('statsEntryPerDay'),
[{
data: <?php echo $this->count ?>,
@@ -102,8 +106,7 @@ function initStats() {
}],
{
grid: {verticalLines: false},
- bars: {horizontal: false, show: true},
- xaxis: {noTicks: 6, showLabels: false, tickDecimals: 0},
+ xaxis: {noTicks: 6, showLabels: false, tickDecimals: 0, min: -30.75, max: -0.25},
yaxis: {min: 0},
mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}}
});