Merge branch 'master' of disposed.de:scattport
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
class Dashboard extends CI_Controller {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
@@ -35,7 +35,46 @@ class Dashboard extends CI_Controller {
|
||||
}
|
||||
|
||||
public function index() {
|
||||
$this->load->view('dashboard');
|
||||
$tpl['action_buttons'] = array(
|
||||
array(
|
||||
'icon' => 'tango/folder-new.png',
|
||||
'text' => _('New project'),
|
||||
'target' => site_url('projects/create'),
|
||||
),
|
||||
array(
|
||||
'icon' => 'tango/document-open.png',
|
||||
'text' => _('Recent results'),
|
||||
'target' => site_url('jobs/results'),
|
||||
),
|
||||
);
|
||||
|
||||
$tpl['recent_buttons'] = array(
|
||||
array(
|
||||
'count' => 4,
|
||||
'text' => _('Jobs finished'),
|
||||
'title' => sprintf(_('%d jobs finished recently'), 3),
|
||||
'target' => '#',
|
||||
),
|
||||
array(
|
||||
'count' => 2,
|
||||
'text' => _('Newly shared projects'),
|
||||
'title' => sprintf(_('You were invited to join %d projects'), 2),
|
||||
'target' => '#',
|
||||
),
|
||||
array(
|
||||
'count' => 1,
|
||||
'text' => _('Job running'),
|
||||
'title' => sprintf(_('There is %d job currently running'), 1),
|
||||
'target' => '#',
|
||||
),
|
||||
array(
|
||||
'count' => 2,
|
||||
'text' => _('Jobs pending'),
|
||||
'title' => sprintf(_('There are %2 job currently pending'), 1),
|
||||
'target' => '#',
|
||||
),
|
||||
);
|
||||
$this->load->view('dashboard', $tpl);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,9 @@ class Xmlrpc extends CI_Controller {
|
||||
|
||||
$update = array(
|
||||
'os' => $parameters[0],
|
||||
'workload' => $parameters[1],
|
||||
'uptime' => $parameters[1],
|
||||
'workload' => $parameters[3],
|
||||
'hardware' => $parameters[2],
|
||||
'last_update' => mysql_now()
|
||||
);
|
||||
$this->server->update($server->id, $update);
|
||||
|
||||
@@ -35,5 +35,68 @@ if ( ! function_exists('mysql_now'))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to calculate date or time difference.
|
||||
*
|
||||
* Function to calculate date or time difference. Returns an array or
|
||||
* false on error.
|
||||
*
|
||||
* @author J de Silva <giddomains@gmail.com>
|
||||
* @copyright Copyright © 2005, J de Silva
|
||||
* @link http://www.gidnetwork.com/b-16.html Get the date / time difference with PHP
|
||||
* @param string $start
|
||||
* @param string $end
|
||||
* @return array
|
||||
*/
|
||||
if ( ! function_exists('time_diff'))
|
||||
{
|
||||
function time_diff($start, $end)
|
||||
{
|
||||
$uts['start'] = strtotime($start);
|
||||
$uts['end'] = strtotime($end);
|
||||
if ($uts['start'] !== -1 && $uts['end'] !== -1) {
|
||||
if ($uts['end'] >= $uts['start']) {
|
||||
$diff = $uts['end'] - $uts['start'];
|
||||
$diff = intval($diff);
|
||||
return ($diff);
|
||||
}
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to convert seconds to a pretty string.
|
||||
*
|
||||
* @author Karsten Heiken <karsten@disposed.de>
|
||||
* @param integer $secs the amount of seconds
|
||||
* @param boolean $includeseconds should seconds be appended to the string?
|
||||
* @return string
|
||||
*/
|
||||
if ( ! function_exists('secondsToString'))
|
||||
{
|
||||
function secondsToString($secs, $includeseconds = false)
|
||||
{
|
||||
$days = intval($secs / 86400);
|
||||
$hours = intval($secs / 3600 % 24);
|
||||
$minutes = intval($secs / 60 % 60);
|
||||
$seconds = intval($secs % 60);
|
||||
if (($minutes + $hours + $days) < 1)
|
||||
return (sprintf(_('%d seconds'), $seconds));
|
||||
else if (($minutes + $hours) < 1)
|
||||
$string = sprintf(_('%d minutes'), $minutes);
|
||||
else if ($days < 1)
|
||||
$string = sprintf(_('%d hours, %d minutes'), $hours, $minutes);
|
||||
else
|
||||
$string = sprintf(_('%d days, %d hours, %d minutes'), $days, $hours,
|
||||
$minutes);
|
||||
|
||||
if ($includeseconds)
|
||||
$string .= ' ' . sprintf(_('and %d seconds'), $seconds);
|
||||
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* End of file MY_date_helper.php */
|
||||
/* Location: ./application/helpers/MY_date_helper.php */
|
||||
@@ -81,7 +81,17 @@ class Job extends CI_Model {
|
||||
$this->db->where('project_id', $projectId);
|
||||
}
|
||||
|
||||
return $this->db->get('jobs')->result_array();
|
||||
$jobs = $this->db->get('jobs')->result_array();
|
||||
return array_map(function($var) {
|
||||
if($var['started_at'] == '0000-00-00 00:00:00') {
|
||||
$var['status'] = 'pending';
|
||||
} elseif($var['finished_at'] == '0000-00-00 00:00:00') {
|
||||
$var['status'] = 'running';
|
||||
} else {
|
||||
$var['status'] = 'complete';
|
||||
}
|
||||
return $var;
|
||||
}, $jobs);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -52,7 +52,11 @@ class Server extends CI_Model {
|
||||
* @return array List of all available servers.
|
||||
*/
|
||||
public function getAll() {
|
||||
return $this->db->get('servers')->result_array();
|
||||
$servers = $this->db->get('servers')->result_array();
|
||||
return array_map(function($var) {
|
||||
$var['available'] = time_diff($var['last_update'], mysql_now()) < 120 ? true : false;
|
||||
return $var;
|
||||
}, $servers);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,7 +101,12 @@ class Server extends CI_Model {
|
||||
* @param string $serverId
|
||||
*/
|
||||
public function getById($serverId) {
|
||||
return $this->db->get_where('servers', array('id' => $serverId))->row();
|
||||
$this->load->helper('date');
|
||||
$server = $this->db->get_where('servers', array('id' => $serverId))->row();
|
||||
$server->uptimestring = secondsToString($server->uptime);
|
||||
$server->lastheartbeat = sprintf(_('%s ago'),
|
||||
secondsToString(time_diff($server->last_update, mysql_now())));
|
||||
return $server;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,10 +17,11 @@
|
||||
<h3>Technical information</h3>
|
||||
<h4>Hardware & OS</h4>
|
||||
<p>
|
||||
CPU: Intel Xeon E5540, 2533 MHz<br />
|
||||
Uptime: 254 Tage, 13 Stunden<br />
|
||||
OS: Debian/GNU 5.0r1<br />
|
||||
Workload: 2.01, 1.05, 0.85
|
||||
CPU: <?=$server->hardware;?><br />
|
||||
Uptime: <?=$server->uptimestring;?><br />
|
||||
OS: <?=$server->os;?><br />
|
||||
Workload: <?=sprintf('%.02f', $server->workload);?><br />
|
||||
Last heartbeat: <?=$server->lastheartbeat;?>
|
||||
</p>
|
||||
|
||||
<h4>ScattPort-Statistics</h4>
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<?
|
||||
foreach ($servers as $server):
|
||||
if ($server['available']) {
|
||||
if ($server['workload'] > 2) {
|
||||
if ($server['workload'] > 0.8) {
|
||||
$server['class'] = "pending";
|
||||
$server['status'] = 'busy';
|
||||
} else {
|
||||
|
||||
@@ -1,30 +1,63 @@
|
||||
<?php $this->load->view('header');?>
|
||||
|
||||
<div id="content">
|
||||
<div id="dashboard">
|
||||
<div class="title">
|
||||
<h2><?=_('Dashboard');?></h2>
|
||||
</div>
|
||||
|
||||
<div class="title">
|
||||
<h2><?=_('Dashboard');?></h2>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
<h3><?=_('Projects');?></h3>
|
||||
<p>
|
||||
<a class="button left big" href="projects/create"><?=_('Create a project');?></a><a class="button middle big" href="projects"><?=_('Show projects');?></a><a class="button right big" href="#"><?=_('Search projects');?></a>
|
||||
</p>
|
||||
<div class="box">
|
||||
<h3><?=_('Quick actions');?></h3>
|
||||
<p>
|
||||
<?
|
||||
if(count($action_buttons) > 0):
|
||||
$i = 1;
|
||||
foreach ($action_buttons as $button):
|
||||
if($i == 1 && (count($action_buttons) == 1))
|
||||
$button['class'] = '';
|
||||
elseif($i == count($action_buttons))
|
||||
$button['class'] = 'right';
|
||||
elseif($i == 1)
|
||||
$button['class'] = 'left';
|
||||
else
|
||||
$button['class'] = 'middle';
|
||||
?><a class="button <?=$button['class'];?> big" href="<?=$button['target'];?>"><strong><?=image_asset($button['icon']);?></strong><br /><?=$button['text'];?></a><?
|
||||
$i++;
|
||||
endforeach;
|
||||
endif;
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3><?=_('Recent events');?></h3>
|
||||
<p>
|
||||
<?
|
||||
if(count($recent_buttons) > 0):
|
||||
$i = 1;
|
||||
foreach ($recent_buttons as $button):
|
||||
if($i == 1 && (count($recent_buttons) == 1))
|
||||
$button['class'] = '';
|
||||
elseif($i == count($recent_buttons))
|
||||
$button['class'] = 'right';
|
||||
elseif($i == 1)
|
||||
$button['class'] = 'left';
|
||||
else
|
||||
$button['class'] = 'middle';
|
||||
?><a class="button <?=$button['class'];?> big" href="<?=$button['target'];?>" title="<?=$button['title'];?>"><strong><?=$button['count'];?></strong><br /><?=$button['text'];?></a><?
|
||||
$i++;
|
||||
endforeach;
|
||||
endif;
|
||||
?>
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3><?=_('Administration');?></h3>
|
||||
<p>
|
||||
<a class="button left big" href="#"><?=_('Manage servers');?></a><a class="button middle big" href="<?=site_url('admin/programs');?>"><?=_('Manage programs');?></a><a class="button right big" href="<?=site_url('admin/users');?>"><?=_('Manage users');?></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3><?=_('Experiments');?></h3>
|
||||
<p>
|
||||
<a class="button left big" href="#"><?=_('Newest results');?></a><a class="button middle big" href="#"><?=_('Running jobs');?></a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3><?=_('Administration');?></h3>
|
||||
<p>
|
||||
<a class="button left big" href="#"><?=_('Manage servers');?></a><a class="button middle big" href="<?=site_url('admin/programs');?>"><?=_('Manage programs');?></a><a class="button right big" href="<?=site_url('admin/users');?>"><?=_('Manage users');?></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php $this->load->view('footer');?>
|
||||
|
||||
@@ -175,16 +175,4 @@
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="title">
|
||||
<h2><?=_('Recent events');?></h2>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
<ul id="blog">
|
||||
<li><h4><a href="#" title="<?=_('Calculation done');?>"><?=_('Calculation done');?></a> <abbr title="22.07.2011">22.07.2011</abbr></h4><p><?=sprintf(_('Calculation successfully finished for project "%s"'), 'Gerstenkorn');?></i></p></li>
|
||||
<li><h4><a href="#" title="<?=_('Calculation done');?>"><?=_('Calculation done');?></a> <abbr title="22.07.2011">22.07.2011</abbr></h4><p><?=sprintf(_('Calculation successfully finished for project "%s"'), 'Gerstenkorn');?></i></p></li>
|
||||
<li><h4><a href="#" title="<?=_('Calculation done');?>"><?=_('Calculation done');?></a> <abbr title="22.07.2011">22.07.2011</abbr></h4><p><?=sprintf(_('Calculation successfully finished for project "%s"'), 'Gerstenkorn');?></i></p></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -88,8 +88,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col"><?=_('Experiment');?></th>
|
||||
<th scope="col"><?=_('Started');?></th>
|
||||
<th scope="col"><?=_('Finished');?></th>
|
||||
<th scope="col"><?=_('Status');?></th>
|
||||
<th scope="col"><?=_('Actions');?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -97,11 +96,20 @@
|
||||
<?php
|
||||
if (count($jobs) > 0):
|
||||
foreach ($jobs as $job):
|
||||
if($job['status'] == 'pending') {
|
||||
$job['humanstatus'] = _('Pending');
|
||||
$job['cssclass'] = 'closed';
|
||||
} elseif($job['status'] == 'running') {
|
||||
$job['humanstatus'] = _('Simulation running');
|
||||
$job['cssclass'] = 'pending';
|
||||
} elseif($job['status'] == 'complete') {
|
||||
$job['humanstatus'] = _('Simulation complete');
|
||||
$job['cssclass'] = 'active';
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td><?=$job['name'];?></td>
|
||||
<td><?=$job['started_at'];?></td>
|
||||
<td><?=$job['finished_at'] != '0000-00-00 00:00:00' ? $job['finished_at'] : _('Currently running');?></td>
|
||||
<td><span class="<?=$job['cssclass'];?>"><?=$job['humanstatus'];?></span></td>
|
||||
<td>
|
||||
<a href="<?=site_url('experiments/results/' . $job['id']);?>" title="<?= sprintf(_('Show results for this experiment'), $job['name']);?>"><?=_('Show results');?></a> |
|
||||
<a href="<?=site_url('experiments/edit/' . $job['id']);?>" title="<?= sprintf(_('Edit this experiment'), $job['name']);?>"><?=_('Edit');?></td>
|
||||
|
||||
@@ -676,3 +676,11 @@ html ul.tabs li.active a:hover {
|
||||
.jtip {
|
||||
cursor: help;
|
||||
}
|
||||
|
||||
#dashboard a.button {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#dashboard a.button strong {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
BIN
assets/images/tango/document-new.png
Normal file
BIN
assets/images/tango/document-new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1008 B |
BIN
assets/images/tango/document-open.png
Normal file
BIN
assets/images/tango/document-open.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/images/tango/folder-new.png
Normal file
BIN
assets/images/tango/folder-new.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/images/tango/folder-remote.png
Normal file
BIN
assets/images/tango/folder-remote.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Reference in New Issue
Block a user