示例#1
0
文件: dbclient.py 项目: lbolla/junk
def main():
    db_name = sys.argv[1]
    db = SqlSoup(db_name)
    while True:
        try:
            cmd = raw_input(prompt)
            if not cmd:
                continue
            if cmd.lower() in ("help", "?"):
                show_help()
                continue
            sql = get_sql(cmd, db.engine.name) or cmd
            res = db.execute(sql)
            print_result(res)
            db.commit()

        except (SystemExit, KeyboardInterrupt, EOFError):
            print "\nBye!\n"
            return 0

        except Exception:
            traceback.print_exc()
            db.rollback()
示例#2
0
    def daemon_loop(self, db_connection_url):
        """Main processing loop (not currently used).

        :param options: database information - in the event need to reconnect
        """
        old_local_bindings = {}
        old_vif_ports = {}
        self.db_connected = False

        while True:
            if not self.db_connected:
                time.sleep(self.reconnect_interval)
                db = SqlSoup(db_connection_url)
                self.db_connected = True
                LOG.info('Connecting to database "%s" on %s' % (db.engine.url.database, db.engine.url.host))

            # Get bindings from db.
            all_bindings = self.get_db_port_bindings(db)
            if not self.db_connected:
                continue
            all_bindings_vif_port_ids = set(all_bindings.keys())
            lsw_id_bindings = self.get_db_vlan_bindings(db)
            if not self.db_connected:
                continue

            # Get bindings from OVS bridge.
            vif_ports = self.int_br.get_vif_ports()
            new_vif_ports = dict([(p.vif_id, p) for p in vif_ports])
            new_vif_ports_ids = set(new_vif_ports.keys())

            old_vif_ports_ids = set(old_vif_ports.keys())
            dead_vif_ports_ids = new_vif_ports_ids - all_bindings_vif_port_ids
            dead_vif_ports = [new_vif_ports[p] for p in dead_vif_ports_ids]
            disappeared_vif_ports_ids = old_vif_ports_ids - new_vif_ports_ids
            new_local_bindings_ids = all_bindings_vif_port_ids.intersection(new_vif_ports_ids)
            new_local_bindings = dict([(p, all_bindings.get(p)) for p in new_vif_ports_ids])
            new_bindings = set((p, old_local_bindings.get(p), new_local_bindings.get(p)) for p in new_vif_ports_ids)
            changed_bindings = set([b for b in new_bindings if b[2] != b[1]])

            LOG.debug("all_bindings: %s" % all_bindings)
            LOG.debug("lsw_id_bindings: %s" % lsw_id_bindings)
            LOG.debug("old_vif_ports_ids: %s" % old_vif_ports_ids)
            LOG.debug("dead_vif_ports_ids: %s" % dead_vif_ports_ids)
            LOG.debug("old_vif_ports_ids: %s" % old_vif_ports_ids)
            LOG.debug("new_local_bindings_ids: %s" % new_local_bindings_ids)
            LOG.debug("new_local_bindings: %s" % new_local_bindings)
            LOG.debug("new_bindings: %s" % new_bindings)
            LOG.debug("changed_bindings: %s" % changed_bindings)

            # Take action.
            for p in dead_vif_ports:
                LOG.info("No quantum binding for port " + str(p) + "putting on dead vlan")
                self.port_dead(p)

            for b in changed_bindings:
                port_id, old_port, new_port = b
                p = new_vif_ports[port_id]
                if old_port:
                    old_net_uuid = old_port.network_id
                    LOG.info("Removing binding to net-id = " + old_net_uuid + " for " + str(p) + " added to dead vlan")
                    self.port_unbound(p, old_net_uuid)
                    if not new_port:
                        self.port_dead(p)

                if new_port:
                    new_net_uuid = new_port.network_id
                    if new_net_uuid not in lsw_id_bindings:
                        LOG.warn("No ls-id binding found for net-id '%s'" % new_net_uuid)
                        continue

                    lsw_id = lsw_id_bindings[new_net_uuid]
                    try:
                        self.port_bound(p, new_net_uuid, lsw_id)
                        LOG.info(
                            "Port "
                            + str(p)
                            + " on net-id = "
                            + new_net_uuid
                            + " bound to "
                            + str(self.local_vlan_map[new_net_uuid])
                        )
                    except Exception as e:
                        LOG.info(
                            "Unable to bind Port "
                            + str(p)
                            + " on netid = "
                            + new_net_uuid
                            + " to "
                            + str(self.local_vlan_map[new_net_uuid])
                        )

            for vif_id in disappeared_vif_ports_ids:
                LOG.info("Port Disappeared: " + vif_id)
                old_port = old_local_bindings.get(vif_id)
                if old_port:
                    try:
                        self.port_unbound(old_vif_ports[vif_id], old_port.network_id)
                    except Exception:
                        LOG.info("Unable to unbind Port " + str(p) + " on net-id = " + old_port.network_uuid)

            old_vif_ports = new_vif_ports
            old_local_bindings = new_local_bindings
            try:
                db.commit()
            except Exception as e:
                LOG.info("Unable to commit to database! Exception: %s" % e)
                db.rollback()
                old_local_bindings = {}
                old_vif_ports = {}

            time.sleep(self.polling_interval)
示例#3
0
    def daemon_loop(self, db_connection_url):
        self.local_vlan_map = {}
        old_local_bindings = {}
        old_vif_ports = {}
        db_connected = False

        while True:
            if not db_connected:
                time.sleep(self.reconnect_interval)
                db = SqlSoup(db_connection_url)
                db_connected = True
                LOG.info('Connecting to database "%s" on %s' % (db.engine.url.database, db.engine.url.host))

            all_bindings = {}
            try:
                ports = db.ports.all()
            except Exception as e:
                LOG.info("Unable to get port bindings! Exception: %s" % e)
                db_connected = False
                continue

            for port in ports:
                all_bindings[port.interface_id] = port

            vlan_bindings = {}
            try:
                vlan_binds = db.vlan_bindings.all()
            except Exception as e:
                LOG.info("Unable to get vlan bindings! Exception: %s" % e)
                db_connected = False
                continue

            for bind in vlan_binds:
                vlan_bindings[bind.network_id] = bind.vlan_id

            new_vif_ports = {}
            new_local_bindings = {}
            vif_ports = self.int_br.get_vif_ports()
            for p in vif_ports:
                new_vif_ports[p.vif_id] = p
                if p.vif_id in all_bindings:
                    net_id = all_bindings[p.vif_id].network_id
                    new_local_bindings[p.vif_id] = net_id
                else:
                    # no binding, put him on the 'dead vlan'
                    self.int_br.set_db_attribute("Port", p.port_name, "tag", DEAD_VLAN_TAG)
                    self.int_br.add_flow(priority=2, match="in_port=%s" % p.ofport, actions="drop")

                old_b = old_local_bindings.get(p.vif_id, None)
                new_b = new_local_bindings.get(p.vif_id, None)

                if old_b != new_b:
                    if old_b is not None:
                        LOG.info("Removing binding to net-id = %s for %s" % (old_b, str(p)))
                        self.port_unbound(p, True)
                        if p.vif_id in all_bindings:
                            all_bindings[p.vif_id].op_status = OP_STATUS_DOWN
                    if new_b is not None:
                        # If we don't have a binding we have to stick it on
                        # the dead vlan
                        net_id = all_bindings[p.vif_id].network_id
                        vlan_id = vlan_bindings.get(net_id, DEAD_VLAN_TAG)
                        self.port_bound(p, vlan_id)
                        if p.vif_id in all_bindings:
                            all_bindings[p.vif_id].op_status = OP_STATUS_UP
                        LOG.info(("Adding binding to net-id = %s " "for %s on vlan %s") % (new_b, str(p), vlan_id))

            for vif_id in old_vif_ports:
                if vif_id not in new_vif_ports:
                    LOG.info("Port Disappeared: %s" % vif_id)
                    if vif_id in old_local_bindings:
                        old_b = old_local_bindings[vif_id]
                        self.port_unbound(old_vif_ports[vif_id], False)
                    if vif_id in all_bindings:
                        all_bindings[vif_id].op_status = OP_STATUS_DOWN

            old_vif_ports = new_vif_ports
            old_local_bindings = new_local_bindings
            try:
                db.commit()
            except Exception as e:
                LOG.info("Unable to commit to database! Exception: %s" % e)
                db.rollback()
                old_local_bindings = {}
                old_vif_ports = {}

            time.sleep(self.polling_interval)
示例#4
0
from sqlalchemy.ext.sqlsoup import SqlSoup

import mechanize, urllib
import cookielib, re, sys
from pyquery import PyQuery as pq
import MultiDict

try: 
    sql_db = SqlSoup('mysql://*****:*****@localhost/hero_fish_db?charset=utf8&use_unicode=0', echo=True)
except:
    sql_db.rollback()
    raise

def crawler(storage_list, **keywords):

    site_id = sql_db.site.filter(sql_db.site.site_nm==keywords['site_id']).first()
    br = keywords['mecha_state']

    print "processing list views..."
    for links in storage_list:
        br.follow_link(links)
        d = pq(br.response().read()) 
        posts = d(keywords['content']).map(lambda i, e: (pq(e).text(), pq(e).html()))
        authors = d(keywords['author']).map(lambda i ,e: pq(e).text())
        
        #post_data = process_post_data(posts, authors, keywords['site_id'])

        linky = links.text

        l_title = unicode(linky, 'latin-1').encode('utf-8')