def wrapper(*args, **kwds):
     global db
     global fs
     if db is None or fs is None:
         db,fs=misc.select_db(sys.argv)
     args = (db,fs) + args
     return f(*args, **kwds)
Exemple #2
0
 def wrapper(*args, **kwds):
     global db
     global fs
     if db is None or fs is None:
         db, fs = misc.select_db(sys.argv)
     args = (db, fs) + args
     return f(*args, **kwds)
Exemple #3
0
 def wrapper(*args, **kwds):
     global db
     global fs
     global sysargs
     if db is None or fs is None:
         db, fs = misc.select_db(sysargs)
     args = (db.new_context_copy(), fs.new_context_copy()) + args
     return f(*args, **kwds)
Exemple #4
0
 def wrapper(*args, **kwds):
     global db
     global fs
     global sysargs
     if db is None or fs is None:
         db,fs=misc.select_db(sysargs)
     args = (db.new_context_copy(), fs.new_context_copy()) + args
     return f(*args, **kwds)
Exemple #5
0
    def wrapper(*args, **kwds):
        global db
        global fs
        global sysargs
        if sysargs is None:
            # Fake a sysargs object for a default
            # this is for when we don't call this file directly
            class A: pass
            sysargs=A()
            sysargs.db='mongo'

        if db is None or fs is None:
            db,fs=misc.select_db(sysargs)
        args = (db,fs) + args
        return f(*args, **kwds)
Exemple #6
0
def get_commands():
    from cgi import escape
    import misc
    db, fs = misc.select_db(None)

    with open('commands.html', 'w') as f:
        f.write("""
<html>
<STYLE TYPE="text/css">
  pre { border: 1px solid}
</STYLE>
<body>""")
        for m in db.database.input_messages.find():
            f.write("<pre>")
            f.write("<b>" + str(m.get('timestamp', None)) + "</b>")
            f.write("\n")
            code = m['content']['code']

            s = escape(code if code is not None else 'None')
            f.write(s.encode('utf-8'))
            f.write("</pre>")
        f.write("</body></html>")
Exemple #7
0
def get_commands():
    from cgi import escape
    import misc
    db, fs = misc.select_db(None)


    with open('commands.html','w') as f:
        f.write("""
<html>
<STYLE TYPE="text/css">
  pre { border: 1px solid}
</STYLE>
<body>""")
        for m in db.database.input_messages.find():
            f.write("<pre>")
            f.write("<b>"+str(m.get('timestamp',None))+"</b>")
            f.write("\n")
            code=m['content']['code']
            
            s=escape(code if code is not None else 'None')
            f.write(s.encode('utf-8'))
            f.write("</pre>")
        f.write("</body></html>")
Exemple #8
0
                      default=singlecell_config.device_config.get('untrusted-cpu',-1), 
                      help="CPU time (seconds) allotted to each session")
    parser.add_option("--untrusted-mem", dest="untrusted_mem", type=float,
                      default=singlecell_config.device_config.get('untrusted-mem',-1), 
                      help="Memory (MB) allotted to each session")
    parser.add_option("-q", "--quiet", action="store_true", dest="quiet", help="Turn off most logging")

    (sysargs,args)=parser.parse_args()

    if sysargs.untrusted_account is "":
        print "You must give an untrusted account we can ssh into using --untrusted-account"
        sys.exit(1)

    if sysargs.quiet:
        util.LOGGING=False
    db, fs = misc.select_db(sysargs)
    keys=[b64encode(os.urandom(32)) if sysargs.print_cmd else os.urandom(32) for _ in (0,1)]
    db_loop=MessageLoop(db, keys[0])
    fs_loop=MessageLoop(fs, keys[1], isFS=True)
    signal.signal(signal.SIGINT, signal_handler)

    cwd=os.getcwd()
    # TODO: make this a temporary file using python's (or the shell's) tempfile stuff
    filename="/tmp/sage_shared_key%i"
    options=dict(cwd=cwd, workers=sysargs.workers, db_port=db_loop.port, fs_port=fs_loop.port,
                 quiet='-q' if sysargs.quiet or util.LOGGING is False else '',
                 untrusted_python=sysargs.untrusted_python,
                 untrusted_cpu=sysargs.untrusted_cpu,
                 untrusted_mem=sysargs.untrusted_mem)
    cmd="""cd %(cwd)s
%(untrusted_python)s device_process.py --db zmq --timeout 60 -w %(workers)s --cpu %(untrusted_cpu)f --mem %(untrusted_mem)f --dbaddress tcp://localhost:%(db_port)i --fsaddress=tcp://localhost:%(fs_port)i %(quiet)s\n"""%options
Exemple #9
0
            fs_file.close()
    if len(file_list)>0:
        file_list.sort()
        #TODO: this message comes *after* the end of computation message from ipython
        # either we need to slip it in before, or we need to have our own custom end-of-computation message.
        db.add_messages(request_msg["_id"],[{'parent_header':header, 'sequence':sequence,
                                             'msg_type':'extension',
                                             'content':{'msg_type':'files',
                                                        'files':file_list}}])
        shutil.rmtree(tempDir)
        sequence+=1
    db.add_messages(request_msg["_id"],[{'parent_header':header, 'sequence':sequence,
                                         'msg_type':'extension',
                                         'content':{'msg_type':'comp_end'}}])
    #TODO: make polling interval a variable
    time.sleep(0.1)

if __name__ == "__main__":
    import misc
    try:
        from argparse import ArgumentParser
    except ImportError:
        from IPython.external import argparse
        ArgumentParser=argparse.ArgumentParser
    parser=ArgumentParser(description="Run one or more devices to process commands from the client.")
    parser.add_argument("--db", choices=["mongo", "sqlalchemy"], help="Database to use")
    parser.add_argument("-w", type=int, default=1, dest="workers", help="Number of workers to start.")
    sysargs=parser.parse_args()
    db, fs = misc.select_db(sysargs)
    run_ip_pool(db, fs, workers=sysargs.workers)
                        out+=msg["content"]["data"]
                        changed=True
                    elif msg["msg_type"]=="pyout":
                        out+=msg["content"]["data"]["text/plain"]+"\n"
                    elif msg["msg_type"]=="status" and msg["content"]["execution_state"]=="idle":
                        done=True
                    elif msg["msg_type"]=="pyerr":
                        err+=new_stream("error", printout=False, **msg["content"])
                if changed or done:
                    db.set_output(X["_id"], make_output_json(out+err, done))
                    if done:
                        break
        time.sleep(0.1)

if __name__ == "__main__":
    import misc
    if "ipython" in sys.argv:
        db, fs = misc.select_db([""])
        run_ip_device()
    else:
        # argv[1] is number of workers
        # argv[2] is "mongo" (default) or "sqlite"
        db, fs = misc.select_db([""] if len(sys.argv)<3 else ["", sys.argv[2]])
        if len(sys.argv)<=1:
            workers=1
        else:
            workers=int(sys.argv[1])
        outQueue=Queue()
        fslock=Lock()
        run(db, fs, workers=workers)
                            "execution_state"] == "idle":
                        done = True
                    elif msg["msg_type"] == "pyerr":
                        err += new_stream("error",
                                          printout=False,
                                          **msg["content"])
                if changed or done:
                    db.set_output(X["_id"], make_output_json(out + err, done))
                    if done:
                        break
        time.sleep(0.1)


if __name__ == "__main__":
    import misc
    if "ipython" in sys.argv:
        db, fs = misc.select_db([""])
        run_ip_device()
    else:
        # argv[1] is number of workers
        # argv[2] is "mongo" (default) or "sqlite"
        db, fs = misc.select_db(
            [""] if len(sys.argv) < 3 else ["", sys.argv[2]])
        if len(sys.argv) <= 1:
            workers = 1
        else:
            workers = int(sys.argv[1])
        outQueue = Queue()
        fslock = Lock()
        run(db, fs, workers=workers)