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()
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)
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)
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')