Esempio n. 1
0
	def run(self):
		"""
			call this module with argument "<fmfid>"
		"""
		# get files hash from DB
		fmfid=int(self.jobdata['mfid'])
		result = upqdb.UpqDB().query("SELECT f.md5, mf.fid, m.url_prefix, m.url_daemon, m.url_daemon_password, mf.path \
						FROM mirror_file as mf \
						LEFT JOIN file as f on f.fid = mf.fid \
						LEFT JOIN mirror as m on mf.mid = m.mid \
						WHERE mf.mfid = %d" % fmfid)
		res = result.first()

		if not res:
			self.msg("File with jobdata='%s' not found in DB."%(self.jobdata))
			return False

		script_url = res['url_prefix']+"/"+res['url_daemon']
		params	 = urllib.urlencode({'p': res['path'], 'pw': res['url_daemon_password']})
		hash_url   = "%s?%s" % (script_url, params)
		file_path  = res['path']

	        md5 = res['md5']
	        # retrieve md5 hash from deamon.php on remote mirror server
	        self.logger.debug("retrieving '%s'", hash_url)
		try:
	  		hash_file = urllib.urlopen(hash_url)
	 		hash = hash_file.read()
	                hash_file.close()
		except Exception as e:
			self.logger.error(str(e))
			return False 

		self.msg("received md5 hash for filename=%s on fmfid=%s is %s" %(file_path, fmfid, hash))
		self.result = hash
	
		if md5 == hash:
			#TODO add notify job here
			upqdb.UpqDB().query("UPDATE mirror_file SET lastcheck=NOW(), status=1 WHERE mfid=%d" %(fmfid))
			self.msg('Remote hash matches hash in DB.')
			return True
		else:
			query="DELETE FROM mirror_file WHERE mfid=%s " %(fmfid)
			upqdb.UpqDB().query(query)
			self.msg('Remote hash does NOT match hash in DB for mfid %s = %s != %s.' %(fmfid, hash, md5))
			return False
Esempio n. 2
0
 def program_cleanup(sig_num, frame):
     logger = log.getLogger("upq")
     logger.info("Shutting down socket server...")
     server.shutdown()
     logger.info("Disconnecting from DB...")
     upqdb.UpqDB().cleanup()
     log.getLogger("upq").info("Good bye.")
     sys.exit(0)
Esempio n. 3
0
    def revive_jobs(self):
        """
			Fetches all jobs from DB that are in state "new" or "running", and
			recreates the objects from its pickled representation.

			returns  : list of alive, unqueued jobs
		"""
        results = upqdb.UpqDB().query(
            "SELECT * FROM upqueue WHERE status = 1 OR status = 2")
        jobs = []
        for res in results:
            job = res['jobname']
            modclass = module_loader.load_module(job)
            obj = modclass(job, json.loads(res['jobdata']))
            obj.jobid = res['jobid']
            obj.thread = "Thread-revived-UpqJob"
            jobs.append(obj)
        logger.debug("revived jobs='%s'", jobs)
        return jobs
Esempio n. 4
0
from upqdb import UpqDB
import upqconfig

import sys
from xmlrpc.client import ServerProxy

import json
import os
import upqjob
import upqdb


class Sf_sync(upqjob.UpqJob):
    def versionfetch(self):
        from jobs import versionfetch
        j = versionfetch.Versionfetch("versionfetch", {})
        j.run()
        return j.run()

    def run(self):
        self.versionfetch()


upqconfig.UpqConfig()
upqconfig.UpqConfig().readConfig()
db = upqdb.UpqDB()
db.connect(upqconfig.UpqConfig().db['url'], upqconfig.UpqConfig().db['debug'])

s = Sf_sync("sf_sync", dict())
s.run()
Esempio n. 5
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    server = None

    # SIGINT signal handler
    def program_cleanup(sig_num, frame):
        logger = log.getLogger("upq")
        logger.info("Shutting down socket server...")
        server.shutdown()
        logger.info("Disconnecting from DB...")
        upqdb.UpqDB().cleanup()
        log.getLogger("upq").info("Good bye.")
        sys.exit(0)

    usage = "usage: %prog -c CONFIGFILE [options]"
    parser = OptionParser(usage)
    parser.add_option("-c",
                      "--config",
                      dest="configfile",
                      default="",
                      help="path to config file CONFIGFILE")
    #TODO: use this to en/disable daemonization
    #		parser.add_option("-d", "--daemonize",
    #		help="detach from terminal etc")
    parser.add_option("-l",
                      "--logfile",
                      dest="logfile",
                      default="",
                      help="path to logfile LOGFILE")
    (options, argv) = parser.parse_args()

    try:
        # read ini file
        UpqConfig(options.configfile, options.logfile)
        UpqConfig().readConfig()

        #FIXME: remove following line + how does this $%$!" work?
        del UpqConfig().daemon['pidfile']
        #	 if UpqConfig().daemon.has_key('pidfile'):
        #		 lockfile=UpqConfig().daemon['pidfile']
        #		 UpqConfig().daemon['pidfile']=pidlockfile.TimeoutPIDLockFile(lockfile, acquire_timeout=1)
        context = daemon.DaemonContext(**UpqConfig().daemon)
        # daemonize
        context.stdout = sys.stderr
        context.stderr = sys.stderr

        upq = Upq()
        with context:
            # initialize logging
            logger = log.init_logging(UpqConfig().logging)
            logger.info("Starting logging...")
            logger.debug(UpqConfig().config_log)
            # setup and test DB
            logger.info("Connecting to DB...")
            db = upqdb.UpqDB()
            db.connect(UpqConfig().db['url'], UpqConfig().db['debug'])
            db.version()
            # start server
            logger.info("Starting socket server...")
            server = upq.start_server()

        # except SIGINT and SIGTERM
        signal.signal(signal.SIGINT, program_cleanup)
        signal.signal(signal.SIGTERM, program_cleanup)

        log.getLogger("upq").info(
            "Server running until receiving SIGTERM or SIGINT / Ctrl+C.")
        signal.pause()

    except Exception:
        traceback.print_exc(file=sys.stderr)
    try:
        db.cleanup()
    except:
        pass
    sys.exit(1)