diff --git a/application/controllers/ajax.php b/application/controllers/ajax.php
index 6d73ec9..ad4304d 100644
--- a/application/controllers/ajax.php
+++ b/application/controllers/ajax.php
@@ -61,13 +61,23 @@ class Ajax extends CI_Controller {
$unseen = $this->job->getUnseenResults();
foreach ($unseen as $job) {
- $this->job->update($job['id'], array('seen' => 1));
+ if ($job['notified'] == 0) {
+ $this->job->update($job['id'], array('notified' => 1));
- $experiment = anchor('experiments/detail/' . $job['experiment_id'], $job['experiment_name']);
- $project = anchor('projects/detail/' . $job['project_id'], $job['project_name']);
+ $experiment = anchor('experiments/detail/' . $job['experiment_id'], $job['experiment_name']);
+ $project = anchor('projects/detail/' . $job['project_id'], $job['project_name']);
- $this->messages->add(sprintf(_('The job for %s in project %s is ready.'), $experiment, $project), 'success');
+ $this->messages->add(sprintf(_('The job for %s in project %s is ready.'), $experiment, $project), 'success');
+ }
}
+
+ $data = array(
+ 'jobs_finished' => count($unseen),
+ 'jobs_running' => $this->job->countRunning(),
+ 'jobs_pending' => $this->job->countPending(),
+ );
+
+ $this->output->set_output(json_encode($data));
}
/**
diff --git a/application/controllers/dashboard.php b/application/controllers/dashboard.php
index 27cdddb..3dde900 100644
--- a/application/controllers/dashboard.php
+++ b/application/controllers/dashboard.php
@@ -50,26 +50,30 @@ class Dashboard extends CI_Controller {
$tpl['recent_buttons'] = array(
array(
- 'count' => 4,
+ 'count' => $this->job->countUnseenResults(),
'text' => _('Jobs finished'),
+ 'id' => 'jobs_finished',
'title' => sprintf(_('%d jobs finished recently'), 3),
'target' => '#',
),
array(
- 'count' => 2,
+ 'count' => 0,
'text' => _('Newly shared projects'),
+ 'id' => 'shared_projects',
'title' => sprintf(_('You were invited to join %d projects'), 2),
'target' => '#',
),
array(
- 'count' => 1,
+ 'count' => $this->job->countRunning(),
'text' => _('Job running'),
+ 'id' => 'jobs_running',
'title' => sprintf(_('There is %d job currently running'), 1),
'target' => '#',
),
array(
- 'count' => 2,
+ 'count' => $this->job->countPending(),
'text' => _('Jobs pending'),
+ 'id' => 'jobs_pending',
'title' => sprintf(_('There are %2 job currently pending'), 1),
'target' => '#',
),
diff --git a/application/models/job.php b/application/models/job.php
index 4de6875..c08d2e5 100644
--- a/application/models/job.php
+++ b/application/models/job.php
@@ -129,6 +129,14 @@ class Job extends CI_Model {
return $this->db->get('jobs')->result_array();
}
+ /**
+ *
+ */
+ public function getUnnotifiedResults() {
+ $this->db->where('notified', 0);
+ return $this->getUnseenResults();
+ }
+
/**
* Gets a list of jobs that have not yet started running.
*
@@ -138,6 +146,33 @@ class Job extends CI_Model {
$query = $this->db->order_by('created_at', 'asc')->get_where('jobs', array('started_at' => '0000-00-00 00:00:00'), 1);
return $this->db->count_all_results() > 0 ? $query->row() : FALSE;
}
+
+ /**
+ * Counts all unseen jobs.
+ *
+ * @return integer
+ */
+ public function countUnseenResults() {
+ return $this->db->where(array('finished_at !=' => 0, 'seen' => 0))->count_all_results('jobs');
+ }
+
+ /**
+ * Counts all running jobs.
+ *
+ * @return integer
+ */
+ public function countRunning() {
+ return $this->db->where(array('started_at !=' => 0, 'finished_at' => 0))->count_all_results('jobs');
+ }
+
+ /**
+ * Counts all pending jobs.
+ *
+ * @return integer
+ */
+ public function countPending() {
+ return $this->db->where('started_at', 0)->count_all_results('jobs');
+ }
}
/* End of file job.php */
diff --git a/application/views/dashboard.php b/application/views/dashboard.php
index 13d73b4..1811001 100644
--- a/application/views/dashboard.php
+++ b/application/views/dashboard.php
@@ -46,7 +46,7 @@
} else {
$button['class'] = 'middle';
}
-?>=$button['count'];?>
=$button['text'];?>
+?>=$button['count'];?>
=$button['text'];?>
$i++;
endforeach;
endif;
diff --git a/assets/js/scattport.js b/assets/js/scattport.js
index d5acea7..19c1fc9 100644
--- a/assets/js/scattport.js
+++ b/assets/js/scattport.js
@@ -13,7 +13,11 @@ function getNotifications() {
* Looks for finished jobs.
*/
function jobDaemon() {
- $.get(SITE_URL + 'ajax/check_jobs');
+ $.getJSON(SITE_URL + 'ajax/check_jobs', function(data) {
+ $.each(data, function(key, value) {
+ $('#' + key).find('strong').html(value);
+ });
+ });
}
/**
@@ -128,6 +132,7 @@ $(document).ready(function() {
$('#notifications').hide();
getNotifications();
setInterval('getNotifications()', '5000');
+ jobDaemon();
setInterval('jobDaemon()', JOBS_CHECK_INTERVAL * 1000);
/*