Annotation of FreeBSD/tinderbox/webui/module/moduleBuildPorts.php, revision 1.1.1.1

1.1       as          1: <?php
                      2: #-
                      3: # Copyright (c) 2005 Oliver Lehmann <oliver@FreeBSD.org>
                      4: # All rights reserved.
                      5: #
                      6: # Redistribution and use in source and binary forms, with or without
                      7: # modification, are permitted provided that the following conditions
                      8: # are met:
                      9: # 1. Redistributions of source code must retain the above copyright
                     10: #    notice, this list of conditions and the following disclaimer
                     11: # 2. Redistributions in binary form must reproduce the above copyright
                     12: #    notice, this list of conditions and the following disclaimer in the
                     13: #    documentation and/or other materials provided with the distribution.
                     14: #
                     15: # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     16: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     17: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     18: # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     19: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     20: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     21: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     22: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     23: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     24: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     25: # SUCH DAMAGE.
                     26: #
                     27: # $MCom: portstools/tinderbox/webui/module/moduleBuildPorts.php,v 1.14 2007/10/07 00:58:56 ade Exp $
                     28: #
                     29: 
                     30: require_once 'module/module.php';
                     31: require_once 'module/modulePorts.php';
                     32: 
                     33: class moduleBuildPorts extends module {
                     34: 
                     35:        function moduleBuildPorts() {
                     36:                $this->module();
                     37:                $this->modulePorts = new modulePorts();
                     38:        }
                     39: 
                     40:        function display_list_buildports( $build_name, $sort ) {
                     41: 
                     42:                $build = $this->TinderboxDS->getBuildByName( $build_name );
                     43:                $ports = $this->TinderboxDS->getPortsForBuild( $build, $sort );
                     44:                $ports_tree = $this->TinderboxDS->getPortsTreeById( $build->getPortsTreeId() );
                     45:                $jail = $this->TinderboxDS->getJailById( $build->getJailId() );
                     46: 
                     47:                if( is_array( $ports ) && count( $ports ) > 0 ) {
                     48:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
                     49:                        $this->template_assign( 'no_list', false );
                     50:                } else {
                     51:                        $this->template_assign( 'no_list', true );
                     52:                }
                     53: 
                     54:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
                     55:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
                     56:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
                     57:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
                     58:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
                     59:                }
                     60: 
                     61:                foreach ( $ports as $port ) {
                     62:                        if ( $port->getLastFailedDep() != "" ) {
                     63:                                $depreason = $port->getLastFailedDep();
                     64:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
                     65:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
                     66:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
                     67:                                $port_fail_reasons[$depreason]['link']  = false;
                     68: 
                     69:                        }
                     70:                }
                     71: 
                     72:                $qs = array();
                     73:                $qkvs = explode('&', $_SERVER['QUERY_STRING']);
                     74:                foreach ($qkvs as $qkv) {
                     75:                        $kv = explode('=', $qkv);
                     76:                        $qs[$kv[0]] = $kv[1];
                     77:                }
                     78: 
                     79:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
                     80:                $this->template_assign( 'maintainers',            $this->TinderboxDS->getAllMaintainers() );
                     81:                $this->template_assign( 'build_description',      $build->getDescription() );
                     82:                $this->template_assign( 'build_name',             $build_name );
                     83:                $this->template_assign( 'jail_name',              $jail->getName() );
                     84:                $this->template_assign( 'jail_tag',               $jail->getTag() );
                     85:                $this->template_assign( 'jail_lastbuilt',         prettyDatetime( $jail->getLastBuilt() ) );
                     86:                $this->template_assign( 'ports_tree_description', $ports_tree->getDescription() );
                     87:                $this->template_assign( 'ports_tree_lastbuilt',   prettyDatetime( $ports_tree->getLastBuilt() ) );
                     88:                $this->template_assign( 'local_time',             prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
                     89:                $this->template_assign( 'querystring',            $qs);
                     90: 
                     91:                return $this->template_parse( 'list_buildports.tpl' );
                     92:        }
                     93: 
                     94:        function display_failed_buildports( $build_name, $maintainer, $all ) {
                     95: 
                     96:                if( $build_name ) {
                     97:                        $build = $this->TinderboxDS->getBuildByName( $build_name );
                     98:                        $build_id = $build->getId();
                     99:                } else {
                    100:                        $build_id = false;
                    101:                }
                    102: 
                    103:                if ($all) {
                    104:                        $ports = $this->TinderboxDS->getPortsByStatus( $build_id, $maintainer, '', 'SUCCESS' );
                    105:                } else {
                    106:                        $ports = $this->TinderboxDS->getPortsByStatus( $build_id, $maintainer, 'FAIL', '' );
                    107:                }
                    108: 
                    109:                if( is_array( $ports ) && count( $ports ) > 0 ) {
                    110:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
                    111:                        $this->template_assign( 'no_list', false );
                    112:                } else {
                    113:                        $this->template_assign( 'no_list', true );
                    114:                }
                    115: 
                    116:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
                    117:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
                    118:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
                    119:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
                    120:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
                    121:                }
                    122: 
                    123:                foreach ( $ports as $port ) {
                    124:                        if ( $port->getLastFailedDep() != "" ) {
                    125:                                $depreason = $port->getLastFailedDep();
                    126:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
                    127:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
                    128:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
                    129:                                $port_fail_reasons[$depreason]['link']  = false;
                    130:                        }
                    131:                }
                    132: 
                    133:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
                    134:                $this->template_assign( 'build_name', $build_name );
                    135:                $this->template_assign( 'maintainer', $maintainer );
                    136:                $this->template_assign( 'local_time', prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
                    137: 
                    138:                return $this->template_parse( 'failed_buildports.tpl' );
                    139:        }
                    140: 
                    141:        function display_latest_buildports( $build_name ) {
                    142: 
                    143:                $current_builds = $this->display_current_buildports( $build_name );
                    144: 
                    145:                if( $build_name ) {
                    146:                        $build = $this->TinderboxDS->getBuildByName( $build_name );
                    147:                        $build_id = $build->getId();
                    148:                } else {
                    149:                        $build_id = false;
                    150:                }
                    151: 
                    152:                $ports = $this->TinderboxDS->getLatestPorts( $build_id, 20 );
                    153: 
                    154:                if( is_array( $ports ) && count( $ports ) > 0 ) {
                    155:                        $this->template_assign( 'data', $this->modulePorts->get_list_data( $build_name, $ports ) );
                    156:                        $this->template_assign( 'no_list', false );
                    157:                } else {
                    158:                        $this->template_assign( 'no_list', true );
                    159:                }
                    160: 
                    161:                foreach( $this->TinderboxDS->getAllPortFailReasons() as $reason ) {
                    162:                        $port_fail_reasons[$reason->getTag()]['tag']   = htmlentities($reason->getTag());
                    163:                        $port_fail_reasons[$reason->getTag()]['descr'] = $reason->getDescr();
                    164:                        $port_fail_reasons[$reason->getTag()]['type']  = $reason->getType();
                    165:                        $port_fail_reasons[$reason->getTag()]['link']  = true;
                    166:                }
                    167: 
                    168:                foreach ( $ports as $port ) {
                    169:                        if ( $port->getLastFailedDep() != "" ) {
                    170:                                $depreason = $port->getLastFailedDep();
                    171:                                $port_fail_reasons[$depreason]['tag']   = htmlentities( $depreason );
                    172:                                $port_fail_reasons[$depreason]['descr'] = htmlentities( "Port was not built since dependency $depreason failed." );
                    173:                                $port_fail_reasons[$depreason]['type']  = 'COMMON';
                    174:                                $port_fail_reasons[$depreason]['link']  = false;
                    175:                        }
                    176:                }
                    177: 
                    178:                $this->template_assign( 'port_fail_reasons',      $port_fail_reasons );
                    179:                $this->template_assign( 'current_builds',         $current_builds );
                    180:                $this->template_assign( 'build_name',             $build_name );
                    181:                $this->template_assign( 'local_time',             prettyDatetime( date( 'Y-m-d H:i:s' ) ) );
                    182: 
                    183:                return $this->template_parse( 'latest_buildports.tpl' );
                    184:        }
                    185: 
                    186:        function display_current_buildports( $showbuild ) {
                    187:                $activeBuilds = array();
                    188:                $builds = $this->TinderboxDS->getBuilds();
                    189:                if( $builds ) {
                    190:                        foreach( $builds as $build ) {
                    191:                                if( empty( $showbuild ) || $build->getName() == $showbuild ) {
                    192:                                        if( $build->getBuildStatus() == 'PORTBUILD' ) {
                    193:                                                $activeBuilds[] = $build;
                    194:                                        }
                    195:                                }
                    196:                        }
                    197:                }
                    198: 
                    199:                if( sizeof( $activeBuilds ) > 0 ) {
                    200:                        $i = 0;
                    201:                        foreach( $activeBuilds as $build ) {
                    202:                                if( $build->getBuildCurrentPort() )
                    203:                                        $data[$i]['port_current_version'] = $build->getBuildCurrentPort();
                    204:                                else
                    205:                                        $data[$i]['port_current_version'] = preparing_next_build;
                    206: 
                    207:                                $data[$i]['build_name'] = $build->getName();
                    208:                                $data[$i]['build_last_updated'] = $build->getBuildLastUpdated();
                    209:                                $data[$i]['build_eta'] = 'N/A';
                    210:                                $currport = $this->TinderboxDS->getCurrentPortForBuild($build->getId());
                    211:                                if (!is_null($currport)) {
                    212:                                        $bp = $this->TinderboxDS->getBuildPorts($currport->getId(), $build->getId());
                    213:                                        $as = explode(" ", $build->getBuildLastUpdated());
                    214:                                        $ymd = explode("-", $as[0]);
                    215:                                        $hms = explode(":", $as[1]);
                    216:                                        $then = mktime($hms[0], $hms[1], $hms[2], $ymd[1], $ymd[2], $ymd[0]);
                    217:                                        $diff = time() - $then;
                    218:                                        if ($bp->getLastRunDuration() - $diff >= 0)
                    219:                                                $data[$i]['build_eta'] = $bp->getLastRunDuration() - $diff;
                    220:                                }
                    221:                                $i++;
                    222:                        }
                    223:                        $this->template_assign( 'data', $data );
                    224:                        $this->template_assign( 'no_list', false );
                    225:                } else {
                    226:                        $this->template_assign( 'no_list', true );
                    227:                }
                    228: 
                    229:                $this->template_assign( 'build_name', $showbuild );
                    230: 
                    231:                return $this->template_parse( 'current_buildports.tpl' );
                    232:        }
                    233: }
                    234: ?>