Beispiel #1
0
    def load_info(self):

        # reload list of packages (allows us to update the list without restarting the daemon)
        reload(config)

        self.td_active = config.td_active

        self.max_poll_interval = config.td_max_poll_interval
        self.network_error_interval = config.td_network_error_interval

        self.num_sequential = config.td_num_sequential

        self.sequential = config.td_sequential

        self.src_repo = src_repo_utils.svn(config.MONO_ROOT, key_file=config.src_key_file)
        self.distfiles = datastore.source_file_repo()

        self.pack_objs = {}
        for pack in config.td_packages:
            self.pack_objs[pack] = packaging.package("", pack)
Beispiel #2
0
    def load_info(self):

        # reload list of packages (allows us to update the list without restarting the daemon)
        reload(config)

        self.td_active = config.td_active

        self.max_poll_interval = config.td_max_poll_interval
        self.network_error_interval = config.td_network_error_interval

        self.num_sequential = config.td_num_sequential

        self.sequential = config.td_sequential

        self.src_repo = src_repo_utils.svn(config.MONO_ROOT,
                                           key_file=config.src_key_file)
        self.distfiles = datastore.source_file_repo()

        self.pack_objs = {}
        for pack in config.td_packages:
            self.pack_objs[pack] = packaging.package("", pack)
Beispiel #3
0
def index(req, **vars):

	# Debug to see what's available in req
	#return("\n".join(dir(req)))

	# Validate/sanitize args to catch some common security errors
	vars = www_utils.sanitize_args(vars)

	# Default to HEAD if it's not specified
	if vars.has_key('HEAD_or_RELEASE'):
		HEAD_or_RELEASE = vars['HEAD_or_RELEASE']
	else:
		HEAD_or_RELEASE = 'HEAD'

	if HEAD_or_RELEASE != "HEAD" and HEAD_or_RELEASE != "RELEASE":
		return("Invalid parameters")

	scriptname = os.path.basename(req.canonical_filename)

	# Pull this in from the release repo
	plat_objs = build.get_platform_objs()
	pack_objs, noarch_pack_objs = build.get_package_objs(honor_disable_webview=True)

	req.content_type = "text/html"

	req.write( """
	%s
	<HTML>
	<HEAD>
	<TITLE>Mono Build Status - %s</TITLE>
	<link rel="stylesheet" href="../build.css" type="text/css">
	<script language="javascript" src="../build.js" type="text/javascript"></script>
	<meta http-equiv="refresh" content="60">
	</HEAD>
	<BODY>

	<H1>Mono Build Status - %s</H1>

	""" % (doc_type, HEAD_or_RELEASE, HEAD_or_RELEASE))
	
	
	# Display status of tarball daemon
	tarball_daemon_status = "Active"
	td_color = "#008A10"
	if not config.td_active:
		tarball_daemon_status = "Stopped"
		td_color = "#999999"
			
	# Display status of scheduler daemon
	sched_daemon_status = "Active"
	sd_color = "#008A10"
	if not config.sd_active:
		sched_daemon_status = "Stopped"
		sd_color = "#999999"

	req.write("""
	<h2>Tarball daemon: <span style='color:%s'>%s</span>
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scheduler daemon: <span style='color:%s'>%s</span></h2>
		
	""" % (td_color,tarball_daemon_status,sd_color,sched_daemon_status))
	

	legend_html = """
	
	<h3>Build Matrix Legend</h3>
	<div>
	<table class="legend">

	<tbody>
	<tr>
	<th class="inprogress">In Progress</th>
	<th class="success">Success</th>
	<th class="failure">Build Failed</th>
	<th class="testfailure">Tests Failed</th>
	<th class="timeout">Timed Out</th>
	<th class="new">New</th>
	</tr>
	</tbody>
	</table>
	<p>
	<table>
	<tr><td>Inner color:</td><td>current build</td><td>%s</td><td>Black label:</td><td>Active platform</td></tr>
	<tr><td>Outer color:</td><td>previous build</td><td></td><td>Grey label:</td><td><span style='color:#999999'>Stopped platform</span></td></tr>
	
	</table>
	</p>
	</div>""" % ('&nbsp;' * 20)

	req.write(legend_html)
	 
	req.write("""
	<h3>Build Matrix</h3>

	<div>
	<table class="buildstatus">
	""")

	# Get unique list of used platforms
	platforms = {}
	for obj in pack_objs:
		for host in obj.info['BUILD_HOSTS']:
			platforms[host] = ""

	# Remove unused plat_objs
	num_removed = 0
	for i in range(0, len(plat_objs)):
		if not platforms.has_key(plat_objs[i - num_removed].name):
			plat_objs.pop(i - num_removed)
			num_removed += 1
	
	count = 0

	# Only read once here
	src = datastore.source_file_repo()
	src.load_info()

	# Iterate through arch packages, and then noarch packages
	for (platforms, packs) in  [ (plat_objs, pack_objs), (['noarch'], noarch_pack_objs) ]:
		
		req.write("<tr><td></td>\n")

		for obj in packs:
			req.write("<th>%s</th>\n" % obj.name)

		req.write("</tr>\n")

		# Add row for mktarball status
		req.write("<tr><th>mktarball</th>\n")
		for package in packs:
			info = src.get_tarball_state_info(HEAD_or_RELEASE, package.name, read_info=False)

			revision = ""
			revision2 = ""
			state = ""
			state2 = ""
			if len(info['revisions']) > 0:
				revision = info['revisions'][0]
				state = info['state'][revision]

				link = '<a href="../tarball_logs/%s/%s/%s.log">%s</a>' % (HEAD_or_RELEASE, package.name, revision, revision)

				if len(info['revisions']) > 1:
					revision2 = info['revisions'][1]
					state2 = info['state'][revision2]

				if revision2:
					req.write('<td class="%s">' % state2)
					req.write('<center><table class="%s"><tr><td>' % (state))
					req.write(link)
					req.write("</td></tr></table></center>")
					req.write("</td>\n")
				else:
					req.write('<td class="%s">' % state)
					req.write(link)
					req.write("</td>\n")

			else:
				req.write('<td class="new">')
				req.write("</td>\n")

		req.write("</tr>\n")
		# End of mktarball row

		# list out non-noarch packages
		for platform in platforms:
			if platform == 'noarch':
				platform_name = "noarch"
			else: platform_name = platform.name

			# TODO: Find out if the platform is removed from the schedulers list
			isRunning = platform_name in config.sd_latest_build_distros
			if platform_name == "noarch":
				isRunning = True
				
			color =  "black"
			if not isRunning:
				color = "#999999"
				
			styled_text = "<span style='color:%s'>%s</span>" % (color, platform_name)
			#status_image = "<img src='%s'>" % status_image 
			
			#req.write("<tr><th>%s <br>%s</th>\n" % (platform_name,status_image))
			req.write("<tr><th>%s</th>\n" % styled_text)

			for package in packs:
				#req.write("<br>".join(package.info.keys()))
				if platform == "noarch": platform_name = package.info['BUILD_HOSTS'][0]	
			
				# if this is a valid package for this platform...	
				if package.info['BUILD_HOSTS'].count(platform_name):
					# show the last two builds (otherwise, it's going to mostly be showing yellow)
					versions = build.get_versions(HEAD_or_RELEASE, platform_name, package.name) # in <num> format

					version = ""
					version2 = ""
					state = ""

					# pop and get first version
					if len(versions) > 0:
						version = versions.pop()
						build_info = datastore.build_info(HEAD_or_RELEASE, platform_name, package.name, version)
						state = build_info.get_state()

					# pop and get second version
					if len(versions) > 0:
						version2 = versions.pop()
						build_info2 = datastore.build_info(HEAD_or_RELEASE, platform_name, package.name, version2)
						state2 = build_info2.get_state()

					# if it's a valid package, but hasn't been built yet...
					if state == "":
						state = "new"
						link = ""
					else:
						link = '<a href="%s/packagestatus?platform=%s&amp;package=%s&amp;HEAD_or_RELEASE=%s">%s</a>' % ( scriptname, platform_name, package.name, HEAD_or_RELEASE, version)

					# if there's a previous version, print a container table
					if version2:
						req.write('<td class="%s">' % state2)
						req.write('<center><table class="%s"><tr><td>' % (state))
						req.write(link)
						req.write("</td></tr></table></center>")
						req.write("</td>\n")
					else:
						req.write('<td class="%s">' % state)
						req.write(link)
						req.write("</td>\n")
				
				else:
					req.write('<td class="notused">')
					req.write("</td>\n")

			req.write("</tr>\n")

		# Separator section ( # Don't write this on the last one )
		if count == 0:
			req.write("<tr><td></td></tr>\n")

		count+= 1
	

	req.write("</table>\n</div>")

        # Legend
	req.write(legend_html)

	# Link to toggle between HEAD and RELEASE
	if HEAD_or_RELEASE == "RELEASE":
		toggle_link = "HEAD"
	else:   toggle_link = "RELEASE"
	req.write("""<p><a href="%s?HEAD_or_RELEASE=%s">%s Status</a></p>""" % (scriptname, toggle_link, toggle_link) )


	# Footer
	req.write("""

	</BODY>
	</HTML>
	""")
Beispiel #4
0
#
##############################################################

##############################################################
# sync thread options
# Use rsync to synchronize the last n builds
sync_log = logger.Logger(filename="sync.log", print_screen=0, compressed=0)

#
##############################################################

##############################################################
# scheduler threads options

version_re = re.compile(".*-(.*).(tar.gz|tar.bz2|zip)")
tarballs = datastore.source_file_repo()
# Set the lock object
tarball_lock = threading.Lock()

scheduler_log = logger.Logger(filename="scheduler.log", print_screen=0, compressed=0)

#
##############################################################

# TODO: CTRL-C is killing mktarball... what's going on? (looks like tarball-builder-daemon didn't work either...? Could it be a python regression?)
class tarball_builder(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.load_info()

    def load_info(self):
Beispiel #5
0
#
##############################################################

##############################################################
# sync thread options
# Use rsync to synchronize the last n builds
sync_log = logger.Logger(filename='sync.log', print_screen=0, compressed=0)

#
##############################################################

##############################################################
# scheduler threads options

version_re = re.compile(".*-(.*).(tar.gz|tar.bz2|zip)")
tarballs = datastore.source_file_repo()
# Set the lock object
tarball_lock = threading.Lock()

scheduler_log = logger.Logger(filename='scheduler.log',
                              print_screen=0,
                              compressed=0)

#
##############################################################


# TODO: CTRL-C is killing mktarball... what's going on? (looks like tarball-builder-daemon didn't work either...? Could it be a python regression?)
class tarball_builder(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
Beispiel #6
0
def index(req, **vars):

    # Debug to see what's available in req
    #return("\n".join(dir(req)))

    # Validate/sanitize args to catch some common security errors
    vars = www_utils.sanitize_args(vars)

    # Default to HEAD if it's not specified
    if vars.has_key('HEAD_or_RELEASE'):
        HEAD_or_RELEASE = vars['HEAD_or_RELEASE']
    else:
        HEAD_or_RELEASE = 'HEAD'

    if HEAD_or_RELEASE != "HEAD" and HEAD_or_RELEASE != "RELEASE":
        return ("Invalid parameters")

    scriptname = os.path.basename(req.canonical_filename)

    # Pull this in from the release repo
    plat_objs = build.get_platform_objs()
    pack_objs, noarch_pack_objs = build.get_package_objs(
        honor_disable_webview=True)

    req.content_type = "text/html"

    req.write("""
	%s
	<HTML>
	<HEAD>
	<TITLE>Mono Build Status - %s</TITLE>
	<link rel="stylesheet" href="../build.css" type="text/css">
	<script language="javascript" src="../build.js" type="text/javascript"></script>
	<meta http-equiv="refresh" content="60">
	</HEAD>
	<BODY>

	<H1>Mono Build Status - %s</H1>

	""" % (doc_type, HEAD_or_RELEASE, HEAD_or_RELEASE))

    # Display status of tarball daemon
    tarball_daemon_status = "Active"
    td_color = "#008A10"
    if not config.td_active:
        tarball_daemon_status = "Stopped"
        td_color = "#999999"

    # Display status of scheduler daemon
    sched_daemon_status = "Active"
    sd_color = "#008A10"
    if not config.sd_active:
        sched_daemon_status = "Stopped"
        sd_color = "#999999"

    req.write("""
	<h2>Tarball daemon: <span style='color:%s'>%s</span>
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scheduler daemon: <span style='color:%s'>%s</span></h2>
		
	""" % (td_color, tarball_daemon_status, sd_color, sched_daemon_status))

    legend_html = """
	
	<h3>Build Matrix Legend</h3>
	<div>
	<table class="legend">

	<tbody>
	<tr>
	<th class="inprogress">In Progress</th>
	<th class="success">Success</th>
	<th class="failure">Build Failed</th>
	<th class="testfailure">Tests Failed</th>
	<th class="timeout">Timed Out</th>
	<th class="new">New</th>
	</tr>
	</tbody>
	</table>
	<p>
	<table>
	<tr><td>Inner color:</td><td>current build</td><td>%s</td><td>Black label:</td><td>Active platform</td></tr>
	<tr><td>Outer color:</td><td>previous build</td><td></td><td>Grey label:</td><td><span style='color:#999999'>Stopped platform</span></td></tr>
	
	</table>
	</p>
	</div>""" % ('&nbsp;' * 20)

    req.write(legend_html)

    req.write("""
	<h3>Build Matrix</h3>

	<div>
	<table class="buildstatus">
	""")

    # Get unique list of used platforms
    platforms = {}
    for obj in pack_objs:
        for host in obj.info['BUILD_HOSTS']:
            platforms[host] = ""

    # Remove unused plat_objs
    num_removed = 0
    for i in range(0, len(plat_objs)):
        if not platforms.has_key(plat_objs[i - num_removed].name):
            plat_objs.pop(i - num_removed)
            num_removed += 1

    count = 0

    # Only read once here
    src = datastore.source_file_repo()
    src.load_info()

    # Iterate through arch packages, and then noarch packages
    for (platforms, packs) in [(plat_objs, pack_objs),
                               (['noarch'], noarch_pack_objs)]:

        req.write("<tr><td></td>\n")

        for obj in packs:
            req.write("<th>%s</th>\n" % obj.name)

        req.write("</tr>\n")

        # Add row for mktarball status
        req.write("<tr><th>mktarball</th>\n")
        for package in packs:
            info = src.get_tarball_state_info(HEAD_or_RELEASE,
                                              package.name,
                                              read_info=False)

            revision = ""
            revision2 = ""
            state = ""
            state2 = ""
            if len(info['revisions']) > 0:
                revision = info['revisions'][0]
                state = info['state'][revision]

                link = '<a href="../tarball_logs/%s/%s/%s.log">%s</a>' % (
                    HEAD_or_RELEASE, package.name, revision, revision)

                if len(info['revisions']) > 1:
                    revision2 = info['revisions'][1]
                    state2 = info['state'][revision2]

                if revision2:
                    req.write('<td class="%s">' % state2)
                    req.write('<center><table class="%s"><tr><td>' % (state))
                    req.write(link)
                    req.write("</td></tr></table></center>")
                    req.write("</td>\n")
                else:
                    req.write('<td class="%s">' % state)
                    req.write(link)
                    req.write("</td>\n")

            else:
                req.write('<td class="new">')
                req.write("</td>\n")

        req.write("</tr>\n")
        # End of mktarball row

        # list out non-noarch packages
        for platform in platforms:
            if platform == 'noarch':
                platform_name = "noarch"
            else:
                platform_name = platform.name

            # TODO: Find out if the platform is removed from the schedulers list
            isRunning = platform_name in config.sd_latest_build_distros
            if platform_name == "noarch":
                isRunning = True

            color = "black"
            if not isRunning:
                color = "#999999"

            styled_text = "<span style='color:%s'>%s</span>" % (color,
                                                                platform_name)
            #status_image = "<img src='%s'>" % status_image

            #req.write("<tr><th>%s <br>%s</th>\n" % (platform_name,status_image))
            req.write("<tr><th>%s</th>\n" % styled_text)

            for package in packs:
                #req.write("<br>".join(package.info.keys()))
                if platform == "noarch":
                    platform_name = package.info['BUILD_HOSTS'][0]

                # if this is a valid package for this platform...
                if package.info['BUILD_HOSTS'].count(platform_name):
                    # show the last two builds (otherwise, it's going to mostly be showing yellow)
                    versions = build.get_versions(
                        HEAD_or_RELEASE, platform_name,
                        package.name)  # in <num> format

                    version = ""
                    version2 = ""
                    state = ""

                    # pop and get first version
                    if len(versions) > 0:
                        version = versions.pop()
                        build_info = datastore.build_info(
                            HEAD_or_RELEASE, platform_name, package.name,
                            version)
                        state = build_info.get_state()

                    # pop and get second version
                    if len(versions) > 0:
                        version2 = versions.pop()
                        build_info2 = datastore.build_info(
                            HEAD_or_RELEASE, platform_name, package.name,
                            version2)
                        state2 = build_info2.get_state()

                    # if it's a valid package, but hasn't been built yet...
                    if state == "":
                        state = "new"
                        link = ""
                    else:
                        link = '<a href="%s/packagestatus?platform=%s&amp;package=%s&amp;HEAD_or_RELEASE=%s">%s</a>' % (
                            scriptname, platform_name, package.name,
                            HEAD_or_RELEASE, version)

                    # if there's a previous version, print a container table
                    if version2:
                        req.write('<td class="%s">' % state2)
                        req.write('<center><table class="%s"><tr><td>' %
                                  (state))
                        req.write(link)
                        req.write("</td></tr></table></center>")
                        req.write("</td>\n")
                    else:
                        req.write('<td class="%s">' % state)
                        req.write(link)
                        req.write("</td>\n")

                else:
                    req.write('<td class="notused">')
                    req.write("</td>\n")

            req.write("</tr>\n")

        # Separator section ( # Don't write this on the last one )
        if count == 0:
            req.write("<tr><td></td></tr>\n")

        count += 1

    req.write("</table>\n</div>")

    # Legend
    req.write(legend_html)

    # Link to toggle between HEAD and RELEASE
    if HEAD_or_RELEASE == "RELEASE":
        toggle_link = "HEAD"
    else:
        toggle_link = "RELEASE"
    req.write("""<p><a href="%s?HEAD_or_RELEASE=%s">%s Status</a></p>""" %
              (scriptname, toggle_link, toggle_link))

    # Footer
    req.write("""

	</BODY>
	</HTML>
	""")