Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/local/bin/perl -w
- use lib '/home/mamagdy/perl_training/';
- use DatabaseConnection;
- use Time::Local;
- use strict;
- use CGI qw(:standard);
- # MySQL database configuration
- my $dsn = "DBI:mysql:perl_training:orw-mamagdy-vm";
- my $username = "mamagdy";
- my $password = "";
- # DatabaseConnection object
- my $dbc = DatabaseConnection->connect($dsn, $username, $password);
- print<<EOL;
- Content-type: text/html
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
- <meta name="description" content="">
- <meta name="author" content="">
- <title>CGI Tutorial 101</title>
- <!-- Bootstrap core CSS-->
- <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
- <!-- Custom fonts for this template-->
- <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
- <!-- Page level plugin CSS-->
- <link href="vendor/datatables/dataTables.bootstrap4.css" rel="stylesheet">
- <!-- Custom styles for this template-->
- <link href="css/sb-admin.css" rel="stylesheet">
- <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
- <script src="https://code.highcharts.com/stock/highstock.js"></script>
- <script src="https://code.highcharts.com/stock/modules/exporting.js"></script>
- </head>
- <body class="fixed-nav sticky-footer bg-dark" id="page-top">
- <!-- Navigation-->
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top" id="mainNav">
- <a class="navbar-brand" href="index.html">CGI Tutorial 101</a>
- <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarResponsive">
- <ul class="navbar-nav navbar-sidenav" id="exampleAccordion">
- <li class="nav-item" data-toggle="tooltip" data-placement="right" title="Dashboard">
- <a class="nav-link" href="#">
- <i class="fa fa-fw fa-dashboard"></i>
- <span class="nav-link-text">Dashboard</span>
- </a>
- </li>
- <li class="nav-item" data-toggle="tooltip" data-placement="right" title="Avg. Build Time">
- <a class="nav-link" href="#">
- <i class="fa fa-fw fa-area-chart"></i>
- <span class="nav-link-text">Avg. Build Time</span>
- </a>
- </li>
- <li class="nav-item" data-toggle="tooltip" data-placement="right" title="Local Machines Table">
- <a class="nav-link" href="#">
- <i class="fa fa-fw fa-table"></i>
- <span class="nav-link-text">Local Machines Table</span>
- </a>
- </li>
- </ul>
- <ul class="navbar-nav sidenav-toggler">
- <li class="nav-item">
- <a class="nav-link text-center" id="sidenavToggler">
- <i class="fa fa-fw fa-angle-left"></i>
- </a>
- </li>
- </ul>
- <ul class="navbar-nav ml-auto">
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle mr-lg-2" id="messagesDropdown" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <i class="fa fa-fw fa-envelope"></i>
- <span class="d-lg-none">Messages
- <span class="badge badge-pill badge-primary">12 New</span>
- </span>
- <span class="indicator text-primary d-none d-lg-block">
- <i class="fa fa-fw fa-circle"></i>
- </span>
- </a>
- <div class="dropdown-menu" aria-labelledby="messagesDropdown">
- <h6 class="dropdown-header">New Messages:</h6>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <strong>David Miller</strong>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">Hey there! This new version of SB Admin is pretty awesome! These messages clip off when they reach the end of the box so they dont overflow over to the sides!</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <strong>Jane Smith</strong>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">I was wondering if you could meet for an appointment at 3:00 instead of 4:00. Thanks!</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <strong>John Doe</strong>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">I've sent the final files over to you for review. When you're able to sign off of them let me know and we can discuss distribution.</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item small" href="#">View all messages</a>
- </div>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle mr-lg-2" id="alertsDropdown" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
- <i class="fa fa-fw fa-bell"></i>
- <span class="d-lg-none">Alerts
- <span class="badge badge-pill badge-warning">6 New</span>
- </span>
- <span class="indicator text-warning d-none d-lg-block">
- <i class="fa fa-fw fa-circle"></i>
- </span>
- </a>
- <div class="dropdown-menu" aria-labelledby="alertsDropdown">
- <h6 class="dropdown-header">New Alerts:</h6>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <span class="text-success">
- <strong>
- <i class="fa fa-long-arrow-up fa-fw"></i>Status Update</strong>
- </span>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">This is an automated server response message. All systems are online.</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <span class="text-danger">
- <strong>
- <i class="fa fa-long-arrow-down fa-fw"></i>Status Update</strong>
- </span>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">This is an automated server response message. All systems are online.</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">
- <span class="text-success">
- <strong>
- <i class="fa fa-long-arrow-up fa-fw"></i>Status Update</strong>
- </span>
- <span class="small float-right text-muted">11:21 AM</span>
- <div class="dropdown-message small">This is an automated server response message. All systems are online.</div>
- </a>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item small" href="#">View all alerts</a>
- </div>
- </li>
- <li class="nav-item">
- <form class="form-inline my-2 my-lg-0 mr-lg-2">
- <div class="input-group">
- <input class="form-control" type="text" placeholder="Search for...">
- <span class="input-group-btn">
- <button class="btn btn-primary" type="button">
- <i class="fa fa-search"></i>
- </button>
- </span>
- </div>
- </form>
- </li>
- <li class="nav-item">
- <a class="nav-link" data-toggle="modal" data-target="#exampleModal">
- <i class="fa fa-fw fa-sign-out"></i>Logout</a>
- </li>
- </ul>
- </div>
- </nav>
- <div class="content-wrapper">
- <div class="container-fluid">
- <!-- Breadcrumbs-->
- <ol class="breadcrumb">
- <li class="breadcrumb-item">
- <a href="#">Dashboard</a>
- </li>
- <li class="breadcrumb-item active">My Dashboard</li>
- </ol>
- <!-- High Chart Example-->
- <div class="card mb-3">
- <div class="card-header">
- <i class="fa fa-area-chart"></i> Avg. Build Time</div>
- <div class="card-body myContainer">
- <div id="myHighChart" style="width:100%; height:400px;"></div>
- </div>
- <div class="card-footer small text-muted">
- EOL
- my @result = $dbc->execCommand("SELECT cd, ROUND(AVG(tt),2)
- FROM Builds
- GROUP BY cd;");
- my @avgBuildsGraphData;
- foreach my $row (@result) {
- my $date = @$row[0];
- my $value = @$row[1] / 60; # Average build time per day [in minutes]
- if ($date eq "0000-00-00") {
- print $date, "\t", $value, "\n";
- next;
- }
- my ($year,$mon,$mday) = split('-', $date);
- my $time = timelocal(0,0,0,$mday,$mon-1,$year); # Timestamp ready
- push @avgBuildsGraphData, [$time, $value];
- }
- print<<EOL;
- </div>
- </div>
- <!-- Example DataTables Card-->
- <div class="card mb-3">
- <div class="card-header">
- <i class="fa fa-table"></i> Local Machines Table</div>
- <div class="card-body">
- <div class="table-responsive">
- <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
- <thead>
- <tr>
- <th>Machine Name</th>
- <th>Number of Builds</th>
- <th>Avg. Build Time (min)</th>
- <th>No. of Processor Cores</th>
- <th>RAM Size (GB)</th>
- </tr>
- </thead>
- <tbody>
- EOL
- my @result = $dbc->execCommand("SELECT *
- FROM Machines
- WHERE np > 0;");
- foreach my $row (@result) {
- print<<EOL;
- <tr>
- <td>
- EOL
- print @$row[1]; # machine name
- print<<EOL;
- </td>
- EOL
- print<<EOL;
- <td>
- EOL
- my @buildPerMachine = $dbc->execCommand("SELECT COUNT(*)
- FROM Builds
- WHERE mid = @$row[0];");
- foreach my $data (@buildPerMachine) {
- print @$data[0], "\n"; # no of builds per machine
- }
- print<<EOL;
- </td>
- EOL
- print<<EOL;
- <td>
- EOL
- my @avgBuildTime = $dbc->execCommand("SELECT ROUND(AVG(tt), 2)
- FROM Builds
- WHERE mid = @$row[0];");
- foreach my $time (@avgBuildTime) {
- my $temp = sprintf "%.2f", (@$time[0] / 60); # avg build time
- print $temp;
- }
- print<<EOL;
- </td>
- EOL
- print<<EOL;
- <td>
- EOL
- print @$row[2]; # no of processor cores
- print<<EOL;
- </td>
- EOL
- print<<EOL;
- <td>
- EOL
- print @$row[3]; # memory size - ram
- print<<EOL;
- </td>
- </tr>
- EOL
- }
- print<<EOL;
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- <!-- /.container-fluid-->
- <!-- /.content-wrapper-->
- <footer class="sticky-footer">
- <div class="container">
- <div class="text-center">
- <small>Copyright � Your Website 2017</small>
- </div>
- </div>
- </footer>
- <!-- Scroll to Top Button-->
- <a class="scroll-to-top rounded" href="#page-top">
- <i class="fa fa-angle-up"></i>
- </a>
- <!-- Logout Modal-->
- <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title" id="exampleModalLabel">Ready to Leave?</h5>
- <button class="close" type="button" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">�</span>
- </button>
- </div>
- <div class="modal-body">Select "Logout" below if you are ready to end your current session.</div>
- <div class="modal-footer">
- <button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel</button>
- <a class="btn btn-primary" href="login.html">Logout</a>
- </div>
- </div>
- </div>
- </div>
- <!-- Bootstrap core JavaScript-->
- <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
- <!-- Core plugin JavaScript-->
- <script src="vendor/jquery-easing/jquery.easing.min.js"></script>
- <!-- Page level plugin JavaScript-->
- <script src="vendor/datatables/jquery.dataTables.js"></script>
- <script src="vendor/datatables/dataTables.bootstrap4.js"></script>
- <!-- Custom scripts for all pages-->
- <script>
- \$(function () {
- // Create the chart
- Highcharts.stockChart('myHighChart', {
- rangeSelector: {
- selected: 1
- },
- title: {
- text: '<b>Avg. Build Time Over A Specific Timeframe</b>'
- },
- series: [{
- name: 'Avg. Build Time',
- data: [
- EOL
- foreach my $row (@avgBuildsGraphData) {
- print '[', @$row[0], '000', ', ',@$row[1] , '],';
- }
- print<<EOL;
- ],
- tooltip: {
- valueDecimals: 2
- }
- }]
- });
- });
- \$(function(\$) {
- "use strict"; // Start of use strict
- // Configure tooltips for collapsed side navigation
- \$('.navbar-sidenav [data-toggle="tooltip"]').tooltip({
- template: '<div class="tooltip navbar-sidenav-tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
- })
- // Toggle the side navigation
- \$("#sidenavToggler").click(function(e) {
- e.preventDefault();
- \$("body").toggleClass("sidenav-toggled");
- \$(".navbar-sidenav .nav-link-collapse").addClass("collapsed");
- \$(".navbar-sidenav .sidenav-second-level, .navbar-sidenav .sidenav-third-level").removeClass("show");
- window.dispatchEvent(new Event('resize'));
- });
- });
- // Call the dataTables jQuery plugin
- \$(document).ready(function() {
- \$('#dataTable').DataTable();
- });
- </script>
- </div>
- </body>
- </html>
- EOL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement