~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/buildmaster/model/builder.py

  • Committer: Guilherme Salgado
  • Date: 2010-06-07 09:11:06 UTC
  • mfrom: (10952 launchpad)
  • mto: This revision was merged to the branch mainline in revision 10969.
  • Revision ID: salgado@canonical.com-20100607091106-i0g7vq2dm76sfkup
merge from mainline

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
from sqlobject import (
26
26
    BoolCol, ForeignKey, IntCol, SQLObjectNotFound, StringCol)
 
27
from storm.expr import Count, Sum
27
28
from storm.store import Store
28
29
from zope.component import getUtility
29
30
from zope.interface import implements
36
37
from canonical.launchpad.webapp import urlappend
37
38
from canonical.launchpad.webapp.interfaces import NotFoundError
38
39
from canonical.launchpad.webapp.interfaces import (
39
 
    IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR)
 
40
    IStoreSelector, MAIN_STORE, DEFAULT_FLAVOR, SLAVE_FLAVOR)
40
41
from canonical.lazr.utils import safe_hasattr
41
42
from canonical.librarian.utils import copy_and_close
42
43
from lp.buildmaster.interfaces.buildbase import BuildStatus
47
48
from lp.buildmaster.interfaces.buildfarmjobbehavior import (
48
49
    BuildBehaviorMismatch)
49
50
from lp.buildmaster.interfaces.buildqueue import IBuildQueueSet
 
51
from lp.buildmaster.model.buildfarmjob import BuildFarmJob
50
52
from lp.buildmaster.model.buildfarmjobbehavior import IdleBuildBehavior
51
53
from lp.buildmaster.model.buildqueue import BuildQueue, specific_job_classes
 
54
from lp.buildmaster.model.packagebuild import PackageBuild
52
55
from canonical.database.sqlbase import SQLBase, sqlvalues
53
56
from lp.registry.interfaces.person import validate_public_person
54
57
from lp.services.job.interfaces.job import JobStatus
691
694
                              % arch.processorfamily.id,
692
695
                              clauseTables=("Processor",))
693
696
 
694
 
    def getBuildQueueSizeForProcessor(self, processor, virtualized=False):
 
697
    def getBuildQueueSizes(self):
695
698
        """See `IBuilderSet`."""
696
699
        # Avoiding circular imports.
697
700
        from lp.soyuz.model.archive import Archive
700
703
            DistroArchSeries)
701
704
        from lp.soyuz.model.processor import Processor
702
705
 
703
 
        store = Store.of(processor)
704
 
        origin = (
705
 
            Archive,
706
 
            BinaryPackageBuild,
707
 
            BuildPackageJob,
708
 
            BuildQueue,
709
 
            DistroArchSeries,
 
706
        find_spec = (
 
707
            Count(),
 
708
            Sum(BuildQueue.estimated_duration),
710
709
            Processor,
 
710
            Archive.require_virtualized,
711
711
            )
712
 
        queue = store.using(*origin).find(
713
 
            BuildQueue,
 
712
        store = getUtility(IStoreSelector).get(MAIN_STORE, SLAVE_FLAVOR)
 
713
        results = store.find(
 
714
            find_spec,
714
715
            BuildPackageJob.job == BuildQueue.jobID,
715
716
            BuildPackageJob.build == BinaryPackageBuild.id,
716
 
            BinaryPackageBuild.distroarchseries == DistroArchSeries.id,
717
 
            BinaryPackageBuild.archive == Archive.id,
 
717
            BinaryPackageBuild.package_build == PackageBuild.id,
 
718
            PackageBuild.build_farm_job == BuildFarmJob.id,
 
719
            PackageBuild.archive == Archive.id,
 
720
            BinaryPackageBuild.distro_arch_series == DistroArchSeries.id,
718
721
            DistroArchSeries.processorfamilyID == Processor.familyID,
719
 
            BinaryPackageBuild.buildstate == BuildStatus.NEEDSBUILD,
720
 
            Archive._enabled == True,
721
 
            Processor.id == processor.id,
722
 
            Archive.require_virtualized == virtualized,
723
 
            )
724
 
 
725
 
        return (queue.count(), queue.sum(BuildQueue.estimated_duration))
 
722
            BuildFarmJob.status == BuildStatus.NEEDSBUILD,
 
723
            Archive._enabled == True).group_by(
 
724
                Processor, Archive.require_virtualized)
 
725
 
 
726
        result_dict = {'virt': {}, 'nonvirt': {}}
 
727
        for size, duration, processor, virtualized in results:
 
728
            virt_str = 'virt' if virtualized else 'nonvirt'
 
729
            result_dict[virt_str][processor.name] = (
 
730
                size, duration)
 
731
 
 
732
        return result_dict
726
733
 
727
734
    def pollBuilders(self, logger, txn):
728
735
        """See IBuilderSet."""