summaryrefslogtreecommitdiffstats
path: root/tools/infra-dashboard/pages
diff options
context:
space:
mode:
Diffstat (limited to 'tools/infra-dashboard/pages')
-rw-r--r--tools/infra-dashboard/pages/ci_pods.php91
-rw-r--r--tools/infra-dashboard/pages/dev_pods.php342
-rw-r--r--tools/infra-dashboard/pages/slaves.php60
3 files changed, 493 insertions, 0 deletions
diff --git a/tools/infra-dashboard/pages/ci_pods.php b/tools/infra-dashboard/pages/ci_pods.php
new file mode 100644
index 00000000..5f51530d
--- /dev/null
+++ b/tools/infra-dashboard/pages/ci_pods.php
@@ -0,0 +1,91 @@
+<script type="text/javascript">
+ $(document).ready(function() {
+ $('#example').DataTable( {
+ "order": [[ 3, "desc" ],[ 2, "desc" ]]
+ } );
+ } );
+</script>
+
+<?php
+ include '../utils/jenkinsAdapter.php';
+ include '../utils/database.php';
+
+ connectDB();
+ $result = mysql_query("SELECT * FROM resource, pod WHERE resource.resource_id=pod.resource_id;");
+ closeDB();
+
+ echo '<table id="example" class="table table-striped table-bordered" cellspacing="0" width="100%">';
+ echo "<thead>";
+ echo "<tr>";
+ echo "<th>Name</th>";
+ echo "<th>Slave Name</th>";
+ echo "<th>Status</th>";
+ echo "<th>Installer</th>";
+ echo "<th>Scenario</th>";
+ echo "<th>Branch</th>";
+ echo "<th>Job</th>";
+ echo "</tr>";
+ echo "</thead>";
+ echo "<tbody>";
+
+ while ($row = mysql_fetch_array($result)) {
+ $slave = $row{'slavename'};
+ if (! isCiPod($slave)) continue;
+
+ $slave_url = getSlaveUrl($slave);
+ $status = getSlaveStatus($slave);
+
+ $job_name = "";
+ $job_installer = "";
+ $job_branch = "";
+ $job_url = "";
+ $job_scenario = "";
+ $job_type = "";
+
+ if ($status == 'online'){
+ $job_params = getJJob($slave);
+ $job_name = $job_params['name'];
+ $job_installer = $job_params['installer'];
+ $job_branch = $job_params['branch'];
+ $job_url = $job_params['url']."lastBuild/consoleFull";
+ $job_scenario = $job_params['scenario'];
+ $job_type = $job_params['type'];
+ }
+
+ echo "<tr>";
+ echo "<th><a target='_blank' href='".$row{'link'}."'>".$row{'name'}."</a></th>";
+ echo "<th><a target='_blank' href='".$slave_url."'>".$slave."</a></th>";
+ if ($status == "online") $color = "#BEFAAA";
+ else $color = "#FAAAAB";
+ echo "<th style='background-color: ".$color.";'>".$status."</th>";
+ if ($job_type == "0") $class = "blink_me";
+ else $class="";
+ echo "<th class='".$class."'>".$job_installer."</th>";
+ echo "<th class='".$class."'>".$job_scenario."</th>";
+ echo "<th class='".$class."'>".$job_branch."</th>";
+ $green = '#33cc00';
+ $grey = '#646F73';
+ $red = '#FF5555';
+ $orange = '#EDD62B';
+ if ($job_type == "0") { // job running
+ echo "<th><a class='blink_me' style='font-size:12px;color:".$grey.";' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+ }
+ else if ($job_type == "1") {// last job successful
+ echo "<th><a style='font-size:12px;color:".$green.";' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+ }
+ else if ($job_type == "2") {// last job failed
+ echo "<th><a style='font-size:12px;color:".$red."' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+ }
+ else if ($job_type == "3") {// last job is unstable
+ echo "<th><a style='font-size:12px;color:".$orange."' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+ }
+ else {
+ echo "<th><a style='font-size:12px;' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+ }
+ echo "</tr>";
+ }
+ echo '</tbody>';
+ echo '</table>';
+
+
+?>
diff --git a/tools/infra-dashboard/pages/dev_pods.php b/tools/infra-dashboard/pages/dev_pods.php
new file mode 100644
index 00000000..144504b5
--- /dev/null
+++ b/tools/infra-dashboard/pages/dev_pods.php
@@ -0,0 +1,342 @@
+<?php
+ // trick for the calendar object, if we use always the same id name, it doesn't work properly
+ $random = time();
+ $calendar_id = "calendar_".$random;
+?>
+
+
+<script type="text/javascript">
+ $(document).ready(function() {
+ $('#example').DataTable( {
+ "order": [[ 2, "desc" ],[ 5, "desc"]]
+ } );
+ var date = new Date();
+ var d = date.getDate();
+ var m = date.getMonth();
+ var y = date.getFullYear();
+ } );
+
+ $(function() {
+ var dialog, form,
+
+ // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
+ emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
+ email = $( "#email" ),
+ password = $( "#password" ),
+ allFields = $( [] ).add( email ).add( password ),
+ tips = $( ".validateTips" );
+
+ function updateTips( t ) {
+ tips
+ .text( t )
+ .addClass( "ui-state-highlight" );
+ setTimeout(function() {
+ tips.removeClass( "ui-state-highlight", 1500 );
+ }, 500 );
+ }
+
+ function checkLength( o, n, min, max ) {
+ if ( o.val().length > max || o.val().length < min ) {
+ o.addClass( "ui-state-error" );
+ updateTips( "Length of " + n + " must be between " +
+ min + " and " + max + "." );
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function checkRegexp( o, regexp, n ) {
+ if ( !( regexp.test( o.val() ) ) ) {
+ o.addClass( "ui-state-error" );
+ updateTips( n );
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ function bookResource() {
+ var user_id = $('#hd_user_id').val();
+ if (user_id == "") {
+ alert ("Only registered users can book.");
+ return;
+ }
+ var resource_id = $('#resource_id').val();
+ var resource_name = $('#resource_name').val();
+ var purpose = $('#purpose').val();
+ var starttime = $('#starttime').val();
+ var endtime = $('#endtime').val();
+ $.ajax({
+ type: 'POST',
+ url: "utils/book.php",
+ data: {action: 'book', resource_id: resource_id, resource_name: resource_name, user_id: user_id, start: starttime, end: endtime, purpose: purpose, start: starttime, end: endtime},
+ success: function(data){
+ if (data == "1") alert("Booking not possible (your account is not associated with a role). Please contact the administrator.");
+ else if (data == "2") alert("You are not allowed to book this resource.");
+ else {
+ alert(data)
+ //location.reload();
+ var href = document.location.protocol +"//"+ document.location.hostname + document.location.pathname
+ location.href = href + "?page=devpods"
+ }
+ },
+ errpr: function(data){
+ alert("error")
+ }
+
+ });
+
+ dialog.dialog( "close" );
+ return true;
+ }
+
+ dialog = $( "#dialog-form" ).dialog({
+ autoOpen: false,
+ height: 800,
+ width: 900,
+ modal: true,
+ resizable:false,
+ buttons: {
+ "Book": bookResource,
+ Cancel: function() {
+ dialog.dialog( "close" );
+ $('#starttime').attr('value', "");
+ $('#endtime').attr('value', "");
+ $('#purpose').attr('value', "");
+ $(".ui-dialog-buttonpane button:contains('Book')").attr("disabled", true)
+ .addClass("ui-state-disabled");
+ }
+ },
+ close: function() {
+ form[ 0 ].reset();
+ allFields.removeClass( "ui-state-error" );
+ }
+ });
+
+ form = dialog.find( "form" ).on( "submit", function( event ) {
+ event.preventDefault();
+ bookResource();
+ });
+
+ $(".ui-dialog-buttonpane button:contains('Book')").attr("disabled", true)
+ .addClass("ui-state-disabled");
+ dialog_event = $( "#dialog_event" ).dialog({
+ autoOpen: false,
+ height: 400,
+ width: 420,
+ modal: true,
+ resizable:false,
+ buttons: {
+ Close: function() {
+ dialog_event.dialog( "close" );
+ },
+ "Release": function() {
+ alert("Not working yet.");
+ }
+ },
+ });
+
+
+ $( ".btn-book" ).button().on( "click", function() {
+ var resource_id = $(this).attr('id');
+ var resource_name = $(this).attr('value');
+ $('#resource_id').attr('value', resource_id);
+ $('#resource_name').attr('value', resource_name);
+ var title = "Book resource: ".concat(resource_name);
+ var calendar_id = '<?=$calendar_id?>';
+ $('#<?=$calendar_id?>').fullCalendar( 'destroy' );
+ $.ajax({
+ type: 'POST',
+ url: "utils/book.php",
+ data: {action: 'getBookedDates', resource_id: resource_id},
+
+ success: function(data){
+ //if (data != "") {
+ var calendarOptions = {
+ height: 660,
+ header: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'agendaWeek,month'
+ },
+ defaultView: 'agendaWeek',
+ slotDuration: '00:60:00',
+ slotLabelFormat:"HH:mm",
+ firstDay: 1,
+ nowIndicator: true,
+ allDaySlot: false,
+ selectOverlap: false,
+ selectable: true,
+ selectHelper: true,
+ editable: false,
+ timezone: 'UTC',
+ eventStartEditable: false,
+ eventDurationEditable: false,
+ events: jQuery.parseJSON( data ),
+ select: function(start, end) {
+ var view = $('#<?=$calendar_id?>').fullCalendar('getView');
+ if (view.name == "month") return
+ var title = prompt('Purpose of this booking:');
+ var eventData;
+ var provisional_id = "537818F62BC63518ECE15338FB86C8BE";
+ if (title) {
+ $('#<?=$calendar_id?>').fullCalendar('removeEvents',provisional_id);
+ eventData = {
+ id: provisional_id,
+ title: title,
+ start: start,
+ end: end
+ };
+ start=moment(start).format('YYYY-MM-DD HH:mm:ss');
+ end=moment(end).format('YYYY-MM-DD HH:mm:ss');
+ $('#<?=$calendar_id?>').fullCalendar('renderEvent', eventData, true); // stick? = true
+ $('#starttime').attr('value', start);
+ $('#endtime').attr('value', end);
+ $('#purpose').attr('value', title);
+ $(".ui-dialog-buttonpane button:contains('Book')").attr("disabled", false)
+ .removeClass("ui-state-disabled");
+ }
+ $('#<?=$calendar_id?>').fullCalendar('unselect');
+
+ },
+ eventLimit: true, // allow "more" link when too many events
+ timeFormat: 'H(:mm)', // uppercase H for 24-hour clock
+ eventClick: function(event) {
+ $('#dg-start').text(event.start);
+ $('#dg-end').text(event.end);
+ $('#dg-booker-email').text(event.booker_email);
+ $('#dg-purpose').text(event.title);
+ dialog_event.dialog( "open" );
+ }
+ }
+ $('#<?=$calendar_id?>').fullCalendar(calendarOptions);
+ $('#<?=$calendar_id?>').fullCalendar('render');
+ //}
+ //else {
+ // if first time (it has never been booked)
+ // $('#<?=$calendar_id?>').fullCalendar('removeEventSource');
+ //}
+ },
+ error: function(data){
+ alert("error getting booked dates.");
+ }
+
+ });
+ dialog.dialog( 'option', 'title', title);
+ dialog.dialog( "open" );
+ ///$('#<?=$calendar_id?>').fullCalendar( 'rerenderEvents' )
+ });
+ });
+</script>
+
+<style>
+ .fc-divider {
+ display:none !important;
+ }
+</style>
+
+<?php
+
+ include '../utils/jenkinsAdapter.php';
+ include '../utils/database.php';
+
+ connectDB();
+ //$q = "select r.ID,r.NAME,r.LINK,r.DESCR,r.ACTIVE,b.BOOKEDBY,b.BOOKEDFROM,b.BOOKEDUNTIL,b.PURPOSE from resource r left join booking b on r.ID = b.RES_Id and now() between b.BOOKEDFROM and b.BOOKEDUNTIL where r.TYPE=2;";
+ $q = "SELECT r.resource_id,r.name as resname,r.slavename, r.link,u.user_id,u.name as username,u.email,b.starttime,b.endtime,b.purpose from resource r LEFT JOIN pod p LEFT JOIN booking b INNER JOIN user u ON u.user_id = b.user_id ON b.resource_id = p.resource_id AND now() > b.starttime AND now() <= b.endtime ON r.resource_id = p.resource_id;";
+ $result = mysql_query($q);
+
+ //SELECT r.name as resname,r.slavename, r.link, r.resource_id,u.user_id,u.name as username,u.email,b.starttime,b.endtime,b.purpose from resource r LEFT JOIN pod p LEFT JOIN booking b INNER JOIN user u ON u.user_id = b.user_id ON b.resource_id = p.resource_id AND now() > b.starttime AND now() <= b.endtime ON r.resource_id = p.resource_id WHERE type_id=2;
+ closeDB();
+
+ echo '<table id="example" class="table table-striped table-bordered" cellspacing="0" width="100%">';
+ echo "<thead>";
+ echo "<tr>";
+ echo "<th>Name</th>";
+ echo "<th>Slave Name</th>";
+ echo "<th>Booked by</th>";
+ echo "<th>Booked until</th>";
+ echo "<th>Purpose</th>";
+ echo "<th>Status</th>";
+ echo "<th></th>";
+ echo "</tr>";
+ echo "</thead>";
+ echo "<tbody>";
+
+ while ($row = mysql_fetch_array($result)) {
+ $slave = $row{'slavename'};
+ if (! isDevPod($slave)) continue;
+
+ $slave_url = getSlaveUrl($slave);
+ $status = getSlaveStatus($slave);
+ echo "<tr>";
+ echo "<th><a target='_blank' href='".$row{'link'}."'>".$row{'resname'}."</a></th>";
+ echo "<th><a target='_blank' href='".$slave_url."'>".$slave."</a></th>";
+ if ($row{'username'} != "") $booker = $row{'username'};
+ else $booker="-";
+ echo "<th>".$booker."</th>";
+
+ if ($row{'endtime'} != "") {
+ $until = strtotime($row{'endtime'});
+ echo "<th>".date('d/M/Y', $until)."</th>";
+ //$until = $row{'endtime'};
+ } else {
+ $until="-";
+ echo "<th>".$until."</th>";
+ }
+ if ($row{'purpose'} != "") $purpose = $row{'purpose'};
+ else $purpose="-";
+ echo "<th>".$purpose."</th>";
+ $active = 'true';
+ if ($status == "online") $color = "#BEFAAA";
+ else $color = "#FAAAAB";
+ echo "<th style='background-color: ".$color.";'>".$status."</th>";
+
+ echo "<th><button id='".$row{'resource_id'}."' value='".$row{'slavename'}."' class='btn-book' type='button'>Book</button></th>";
+ echo "</tr>";
+ }
+ echo '</tbody>';
+ echo '</table>';
+?>
+
+
+<div id="dialog-form" title="Book resource">
+ <form>
+ <div id='<?=$calendar_id?>' style="margin-top:10px"></div>
+ <input type="submit" tabindex="-1" style="position:absolute; top:-100px"/>
+ </form>
+</div>
+
+
+<div id="dialog_event" title="event">
+ <table>
+ <tr>
+ <td style="width:100px">Booked by:</td>
+ <td><p id="dg-booker-email"></p></td>
+ </tr>
+ <tr>
+ <td>Start:</td>
+ <td><p id="dg-start"></p></td>
+ </tr>
+ <tr>
+ <td>End:</td>
+ <td><p id="dg-end"></p></td>
+ </tr>
+ <tr>
+ <td>Purpose:</td>
+ <td><p id="dg-purpose"></p></td>
+ </tr>
+ <table>
+</div>
+
+
+
+<input type="hidden" id="resource_id" name="resource_id" value="10"/>
+<input type="hidden" id="resource_name" name="resource_name"/>
+<input type="hidden" id="starttime" value=""/>
+<input type="hidden" id="endtime" value=""/>
+<input type="hidden" id="purpose" value=""/>
+<input type="hidden" id="event_id" value=""/>
+
+
+
diff --git a/tools/infra-dashboard/pages/slaves.php b/tools/infra-dashboard/pages/slaves.php
new file mode 100644
index 00000000..4eb2add9
--- /dev/null
+++ b/tools/infra-dashboard/pages/slaves.php
@@ -0,0 +1,60 @@
+<script type="text/javascript">
+ $(document).ready(function() {
+ $('#example').DataTable( {
+ "order": [[ 2, "desc" ], [ 1, "desc" ]]
+ } );
+ } );
+</script>
+
+<?php
+ include '../utils/jenkinsAdapter.php';
+
+ echo '<table id="example" class="table table-striped table-bordered" cellspacing="0" width="100%">';
+ echo "<thead>";
+ echo "<tr>";
+ echo "<th>Slave name</th>";
+ echo "<th>Status</th>";
+ echo "<th>Current build</th>";
+ echo "</tr>";
+ echo "</thead>";
+ echo "<tbody>";
+
+ foreach ($SLAVES->xpath('computer') as &$value) {
+
+ $slave = $value->displayName;
+ $idle = $value->idle;
+ $slave_url = getSlaveUrl($slave);
+ $status = getSlaveStatus($slave);
+
+ if ($status == "online" and $idle == "true") {
+ $status = "online / idle";
+ $color = "#C8D6C3";
+ }
+ else if ($status == "online") $color = "#BEFAAA";
+ else $color = "#FAAAAB";
+
+ $job_name = "";
+ $job_url = "";
+ $job_scenario = "";
+
+
+ if ($status == 'online') {
+ $job_params = getJJob($slave);
+ $job_name = $job_params['name'];
+ $job_url = $job_params['url'];
+ $job_scenario = $job_params['scenario'];
+ }
+
+ echo "<tr>";
+ echo "<th><a target='_blank' href='".$slave_url."'>".$slave."</a></th>";
+
+ echo "<th style='background-color: ".$color.";'>".$status."</th>";
+ echo "<th><a class='blink_me' style='font-size:12px;color:#33cc00;' target='_blank' href='".$job_url."'>".$job_name."</a></th>";
+
+ echo "</tr>";
+ }
+ echo '</tbody>';
+ echo '</table>';
+
+
+?>