docs: def run():
      """ Run the workbench server """
  
      # Load the configuration file relative to this script location
      config_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config.ini')
      workbench_conf = ConfigParser.ConfigParser()
      config_ini = workbench_conf.read(config_path)
      if not config_ini:
          print 'Could not locate config.ini file, tried %s : exiting...' % config_path
          exit(1)
  
      # Pull configuration settings
      datastore_uri = workbench_conf.get('workbench', 'datastore_uri')
      database = workbench_conf.get('workbench', 'database')
      worker_cap = workbench_conf.getint('workbench', 'worker_cap')
      samples_cap = workbench_conf.getint('workbench', 'samples_cap')
  
      # Spin up Workbench ZeroRPC
      try:
          store_args = {'uri': datastore_uri, 'database': database, 'worker_cap':worker_cap, 'samples_cap':samples_cap}
          workbench = zerorpc.Server(WorkBench(store_args=store_args), name='workbench', heartbeat=60)
          workbench.bind('tcp://0.0.0.0:4242')
          print '\nWorkbench is ready and feeling super duper!'
          gevent_signal(signal.SIGTERM, workbench.stop)
          gevent_signal(signal.SIGINT, workbench.stop)
          gevent_signal(signal.SIGKILL, workbench.stop)
          workbench.run()
          print '\nWorkbench Server Shutting Down... and dreaming of sheep...'
  
      except zmq.error.ZMQError:
          print '\nInfo: Could not start Workbench server (no worries, probably already running...)\n'