Exemple #1
0
def bootstrap(command, conf, vars):
    """Import pickled database dump."""

    appsupport_dir = tg.config.get("appsupport_dir")
    dump_path = os.path.join(appsupport_dir, "Dump")
    for item in glob.iglob("%s/*.pickle" % (dump_path)):
        print "Importing %s" % item
        with open(item, "rb") as f:
            pickled_client = pickle.load(f)
        client = Client()
        for prop in dir(Client):
            attr = getattr(Client, prop)
            if isinstance(attr, sqlalchemy.orm.attributes.InstrumentedAttribute):
                try:
                    value = pickled_client[prop]
                except KeyError:
                    print "Warning: no pickled '%s' attribute" % prop
                else:
                    v = repr(value)
                    if len(v) > (70 - len(prop)):
                        v = v[:67] + "..."
                    # print "client.%s = %s" % (prop, v)
                    setattr(client, prop, value)
        client.update_report(pickled_client["report_plist"])
        # print client
        DBSession.add(client)
        DBSession.flush()
        transaction.commit()
Exemple #2
0
    def postflight(self, runtype=None, mac=None, name=None, serial=None, manifest=None, base64bz2report=None):
        """Log postflight."""
        
        # Decode report
        # FIXME: there has to be a better way to submit a binary blob
        try:
            base64bz2report = base64bz2report.replace(" ", "+")
            bz2report = base64.b64decode(base64bz2report)
            report = bz2.decompress(bz2report)
        except BaseException as e:
            print "Can't decode report from %s (%s): %s" % (request.environ['REMOTE_ADDR'], mac, str(e))
            abort(403)
        
        # Parse plist with plistlib, as Objective-C objects can't be pickled.
        try:
            plist = plistlib.readPlistFromString(report)
        except BaseException as e:
            print "Received invalid plist from %s (%s): %s" % (request.environ['REMOTE_ADDR'], mac, str(e))
            abort(403)
        #plist, format, error = \
        #    NSPropertyListSerialization.propertyListFromData_mutabilityOption_format_errorDescription_(
        #        buffer(report),
        #        NSPropertyListMutableContainers,
        #        None,
        #        None
        #    )
        #if error:
        #    print "error:", error
        #    abort(401)
        
        # Create client if needed.
        client = Client.by_serial(serial)
        if not client:
            print "postflight running without preflight for %s" % mac
            client = Client()
            client.serial = serial
            DBSession.add(client)
        
        # Update client attributes.
        client.runtype = runtype
        if name:
            client.name = name
        else:
            client.name = "<NO NAME>"

        # Get manifest id from plist
        client.mac = mac
        client.manifest = manifest
        client.runstate = u"done"
        client.timestamp = datetime.now()
        client.remote_ip = unicode(request.environ['REMOTE_ADDR'])
        # Save report, updating activity, errors, warnings, and console_user.
        client.update_report(plist)
                
        DBSession.flush()
        
        return "postflight logged for %s\n" % name
Exemple #3
0
 def setUp(self):
     """Prepare model test fixture."""
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Exemple #4
0
    def report_broken_client(self, runtype=None, mac=None, name=None):
        """Log report_broken_client."""

        client = Client.by_mac(mac)
        if not client:
            client = Client()
            client.mac = mac
            DBSession.add(client)
        
        client.runtype = runtype
        client.name = name
        client.runstate = u"broken client"
        client.timestamp = datetime.now()
        client.remote_ip = unicode(request.environ['REMOTE_ADDR'])
        client.report_plist = None
        client.errors = 1
        client.warnings = 0
        
        DBSession.flush()
        
        return "report_broken_client logged for %s\n" % name
Exemple #5
0
    def preflight(self, runtype=None, mac=None, name=None):
        """Log preflight."""

        client = Client.by_mac(mac)
        if not client:
            client = Client()
            client.mac = mac
            DBSession.add(client)
        
        client.runtype = runtype
        if name:
            client.name = name
        else:
            client.name = "<NO NAME>"
        client.runstate = u"in progress"
        client.timestamp = datetime.now()
        client.remote_ip = unicode(request.environ['REMOTE_ADDR'])
        client.activity = {"Updating": "preflight"}
        
        DBSession.flush()
        
        return "preflight logged for %s\n" % name