def do(self): to_poll = set() for d in self.dests: to_poll.update( map(lambda x: x[0], ftnexport.get_subscribers(self.db, d))) self.dests = set() myzone = ftn.addr.str2addr(ftnconfig.ADDRESS)[0] #print (myzone) for a in to_poll: #print("poll", a) a = ftnconfig.get_addr(self.db, a)[1] #print (a) link_id = ftnconfig.find_link(self.db, a) if ftnconfig.get_link_polling(self.db, link_id): print("poll", a) else: #print ("not needed") continue addr = ftn.addr.str2addr(a) if addr[0] == myzone: zonepath = ftnconfig.BINKLEYSTYLE else: zonepath = ftnconfig.BINKLEYSTYLE + ".%d" % addr[0] if addr[3] == 0: pollfilename = "%04x%04x.dlo" % (addr[1], addr[2]) basepath = zonepath else: pollfilename = "0000%04x.dlo" % addr[3] basepath = os.path.join(zonepath, "%04x%04x.pnt" % (addr[1], addr[2])) try: os.makedirs(basepath, exist_ok=True) except FileExistsError: pass except: print("could not create outbound directory") return try: touch = open(os.path.join(basepath, pollfilename), "a") touch.close() except: print("could not poll", a) traceback.print_exc()
def do(self): to_poll = set() for d in self.dests: to_poll.update(map(lambda x: x[0], ftnexport.get_subscribers(self.db,d))) self.dests=set() myzone=ftn.addr.str2addr(ftnconfig.ADDRESS)[0] #print (myzone) for a in to_poll: #print("poll", a) a=ftnconfig.get_addr(self.db, a)[1] #print (a) link_id=ftnconfig.find_link(self.db, a) if ftnconfig.get_link_polling(self.db, link_id): print ("poll",a) else: #print ("not needed") continue addr=ftn.addr.str2addr(a) if addr[0]==myzone: zonepath=ftnconfig.BINKLEYSTYLE else: zonepath=ftnconfig.BINKLEYSTYLE+".%d"%addr[0] if addr[3]==0: pollfilename="%04x%04x.dlo"%(addr[1], addr[2]) basepath=zonepath else: pollfilename="0000%04x.dlo"%addr[3] basepath=os.path.join(zonepath, "%04x%04x.pnt"%(addr[1], addr[2])) try: os.makedirs(basepath, exist_ok=True) except FileExistsError: pass except: print ("could not create outbound directory") return try: touch=open(os.path.join(basepath,pollfilename),"a") touch.close() except: print ("could not poll", a) traceback.print_exc()
print(area, os.listdir("/tank/home/fido/fareas/" + area.lower())) elif domain == "echo": count = db.prepare( "select count(*) from messages where destination=$1").first(aid) print(area, count) if count: continue else: 1 / 0 # 2. send message to subscribers # 3. remove subscriptions and address with ftnimport.session(db) as sess: for node in [ ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid) ]: print(node) input("enter to purge, Ctrl-C to abort") for node in [ ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid) ]: print(node) sess.send_message( ftnconfig.SYSOP, ("node", node), "Sysop", None, "Area Expunging notification", """Dear Sysop, %s %s is about to be deleted from node %s. Please find new uplink for the area or
import ftnconfig import ftnimport import ftnexport from functools import * db=ftnconfig.connectdb() x=db.prepare("""select m.id, s.domain, s.text, d.domain, d.text, d.id from messages m, addresses s, addresses d where d.id=m.destination and m.processed=0 and d.domain=$1 and s.id=m.source""") outp = [] for mid, sd, st, dd, dt, did in x(db.FTN_domains["node"]): s = {} for sid, _, slevel in ftnexport.get_subscribers(db, did, True): s.setdefault(slevel, []).append(sid) if len(s.keys()): lev=min(s.keys()) links = "via " + ", ".join(map(lambda x: ftnexport.get_addr(db, x)[1], s[lev])) else: links = "nowhere to route" outp.append("msg #%d %d|%s->%d|%s (destid %d, %s)\n"%(mid,sd,st,dd,dt,did,links)) #print("".join(outp)) #exit() with ftnimport.session(db) as sess: sess.send_message("Sergey Dorofeev", ("echo", "FLUID.REPORTS"), "All", None, "почтовая очередь",
#!/usr/local/bin/python3 -bb import ftnconfig import ftnexport import ftnimport db = ftnconfig.connectdb() bydomain = {} for domain in ["echo", "fileecho"]: #print ("domain", domain) for t in ftnexport.get_all_targets(db, domain): tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], t) ulist = [] for x in ftnexport.get_subscribers(db, tid, True): ulist.append("%d|%s" % ftnconfig.get_addr(db, x[0]) + "!%d" % x[2]) #print ulist.sort() bydomain.setdefault(domain, {}).setdefault(", ".join(ulist), []).append(t) with ftnimport.session(db) as sess: for d, byuplink in bydomain.items(): outp = [] for u, targets in byuplink.items(): outp.append(" uplink = [" + u + "]\n") targets.sort() for t in targets: outp.append(" " + t + "\n") outp.append("\n")
print ("local subscription") elif cmd == "query": # send areafix request sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "%QUERY", sendmode="direct") elif cmd == "list": # send areafix request sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "%LIST", sendmode="direct") elif cmd == "show": # show subscribed areas if area==".": # show for link for x in ftnexport.get_node_subscriptions(db, subscriber, domain): print (x) else: # show from area tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area) print (tid) for aid, vital, level in ftnexport.get_subscribers(db, tid): print (ftnconfig.get_addr(db, aid)) elif cmd == "showuplink": # show areas subsribed as vital if area==".": # show for link for x in ftnexport.get_node_subscriptions(db, subscriber, domain, asuplink=True): print (x) else: # show from area tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area) print (tid) for x in ftnexport.get_subscribers(db, tid, True): print (x) elif cmd == "verifyuplink": a_uplink = set(ftnexport.get_node_subscriptions(db, subscriber, domain, asuplink=True)) a_all = set(ftnexport.get_node_subscriptions(db, subscriber, domain))
#!/usr/local/bin/python3 -bb import ftnconfig import ftnexport import ftnimport db = ftnconfig.connectdb() bydomain = {} for domain in ["echo", "fileecho"]: #print ("domain", domain) for t in ftnexport.get_all_targets(db, domain): tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], t) ulist = [] for x in ftnexport.get_subscribers(db, tid, True): ulist.append("%d|%s"%ftnconfig.get_addr(db, x[0])+"!%d"%x[2]) #print ulist.sort() bydomain.setdefault(domain, {}).setdefault(", ".join(ulist), []).append(t) with ftnimport.session(db) as sess: for d, byuplink in bydomain.items(): outp=[] for u, targets in byuplink.items(): outp.append(" uplink = ["+u+"]\n") targets.sort() for t in targets: outp.append(" "+t+"\n") outp.append("\n")
sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "%LIST", sendmode="direct") elif cmd == "show": # show subscribed areas if area == ".": # show for link for x in ftnexport.get_node_subscriptions(db, subscriber, domain): print(x) else: # show from area tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area) print(tid) for aid, vital, level in ftnexport.get_subscribers(db, tid): print(ftnconfig.get_addr(db, aid)) elif cmd == "showuplink": # show areas subsribed as vital if area == ".": # show for link for x in ftnexport.get_node_subscriptions(db, subscriber, domain, asuplink=True): print(x) else: # show from area tid = ftnconfig.get_addr_id(db, db.FTN_domains[domain], area) print(tid) for x in ftnexport.get_subscribers(db, tid, True): print(x)
# 1. verify that there is nothing there if domain == "fileecho": print (area, os.listdir("/tank/home/fido/fareas/"+area.lower())) elif domain == "echo": count = db.prepare("select count(*) from messages where destination=$1").first(aid) print (area, count) if count: continue else: 1/0 # 2. send message to subscribers # 3. remove subscriptions and address with ftnimport.session(db) as sess: for node in [ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid)]: print (node) input("enter to purge, Ctrl-C to abort") for node in [ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid)]: print (node) sess.send_message(ftnconfig.SYSOP, ("node", node), "Sysop", None, "Area Expunging notification", """Dear Sysop, %s %s is about to be deleted from node %s. Please find new uplink for the area or expunge it too. """%(domain, area, ftnconfig.ADDRESS)) sess.remove_subscription(domain, area, node)