From c6c7e3c6292b320b322e9c35d34b2a146e7b9bbd Mon Sep 17 00:00:00 2001 From: Eike Foken Date: Thu, 15 Sep 2011 20:17:35 +0200 Subject: [PATCH] Improve job daemon to update dashboard --- application/controllers/ajax.php | 18 +++++++++++--- application/controllers/dashboard.php | 12 ++++++--- application/models/job.php | 35 +++++++++++++++++++++++++++ application/views/dashboard.php | 2 +- assets/js/scattport.js | 7 +++++- 5 files changed, 64 insertions(+), 10 deletions(-) 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'; } -?>