#!/usr/bin/env python import GeoIP import datetime import os import requests import socket import subprocess import sys ROOT = os.path.dirname(os.path.abspath(__file__)) REPO = os.path.join(ROOT, 'x84-extras') GEOIP = GeoIP.new(GeoIP.GEOIP_STANDARD) STATUS_DEFAULT = u'\u221a' STATUS_MISSING = u'X' def port(p, default=None): if p.isdigit(): return int(p) elif p == STATUS_DEFAULT: return default def status_port(proto, addr, p): if p is None: print ' -' return try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((addr, p)) s.close() print ' {}'.format( proto, addr, p, proto) except socket.error as error: print ' port {} down'.format(p) return str(error) def status(): print '' print 'x/84 BBS List' print '' print '' with open(os.path.join(REPO, 'bbs-list.md')) as fp: lines = fp.read().decode('utf-8').splitlines()[4:] for bbs in lines: try: name, addr, telnet, ssh, sftp = bbs[2:-2].split(u' | ') except IndexError: continue telnet_port = port(telnet, 23) ssh_port = port(ssh, 22) sftp_port = port(sftp, 22) errors = [] try: ip = socket.gethostbyname(addr) cc = GEOIP.country_code_by_addr(ip) except socket.error as error: ip = '??' cc = 'XX' errors.append(str(error)) print ' ' print ' '.format(name) print ' '.format( cc.lower(), cc) print ' '.format(addr) errors.append(status_port('telnet', addr, telnet_port)) errors.append(status_port('ssh', addr, ssh_port)) errors.append(status_port('sftp', addr, sftp_port)) errors = filter(None, errors) if errors: print ' '.format(', '.join(errors)) else: print ' ' print ' ' sys.stdout.flush() print '
{}{}{}{}
' print '

Last check: {}

'.format(datetime.datetime.now()) def update(): pipe = subprocess.Popen( ['/usr/bin/git', 'pull', '-u'], cwd=REPO, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) outp = pipe.communicate()[0] if pipe.returncode > 0: print >>sys.stderr, 'updating x84-extras failed' print >>sys.stderr, outp def run(): update() status() if __name__ == '__main__': sys.exit(run())