docs: def process(self, event):
          """
          event.event_type
              'modified' | 'created' | 'moved' | 'deleted'
          event.is_directory
              True | False
          event.src_path
              path/to/observed/file
          """
          uid = str(uuid.uuid4())
          hostname = os.environ.get('VENT_HOST')
          if not hostname:
              hostname = ''
  
          try:
              # TODO should directories be treated as bulk paths to send to a
              #      plugin?
              if not event.is_directory:
                  spath = event.src_path
                  # wait for long copies to finish
                  historicalSize = -1
                  while (historicalSize != os.path.getsize(spath)):
                      historicalSize = os.path.getsize(spath)
                      time.sleep(0.1)
  
                  if os.path.getsize(spath) == 0:
                      spath = str(spath)
                      print('file drop ignoring empty file: {0}'.format(spath))
                      if spath.startswith('/files/trace_'):
                          key = spath.split('_')[1]
                          # Rabbit settings
                          exchange = 'topic-poseidon-internal'
                          exchange_type = 'topic'
                          routing_key = 'poseidon.algos.decider'
  
                          message = {}
                          message[key] = {'valid': False, 'source': 'file_drop'}
                          message = json.dumps(message)
  
                          # Send Rabbit message
                          try:
                              connection = pika.BlockingConnection(
                                  pika.ConnectionParameters(host='rabbit')
                              )
  
                              channel = connection.channel()
                              channel.exchange_declare(
                                  exchange=exchange, exchange_type=exchange_type
                              )
                              channel.basic_publish(exchange=exchange,
                                                    routing_key=routing_key,
                                                    body=message)
                              connection.close()
                          except Exception as e:
                              print('failed to send rabbit message because: ' +
                                    str(e))
  
                      return
  
                  # check if the file was already queued and ignore
                  exists = False
                  print(uid + ' started ' + spath)
                  jobs = self.r.keys(pattern='rq:job*')
                  for job in jobs:
                      print(uid + ' ***')
                      description = self.r.hget(
                          job, 'description').decode('utf-8')
                      print(uid + ' ' + description)
                      if description.startswith("watch.file_queue('"):
                          print(uid + ' ' +
                                description.split("watch.file_queue('" +
                                                  hostname + '_')[1][:-2])
                          print(uid + ' ' + spath)
                          if description.split("watch.file_queue('" +
                                               hostname +
                                               '_')[1][:-2] == spath:
                              print(uid + ' true')
                              exists = True
                      elif description.startswith("watch.gpu_queue('"):
                          print(uid + ' ' +
                                description.split('"file": "')[1].split('"')[0])
                          print(uid + ' ' + spath)
                          if description.split('"file": "')[1].split('"')[0] == spath:
                              print(uid + ' true')
                              exists = True
                      print(uid + ' ***')
  
                  if not exists:
                      # !! TODO this should be a configuration option in the
                      #         vent.template
                      print(uid + " let's queue it " + spath)
                      # let jobs be queued for up to 30 days
                      self.q.enqueue('watch.file_queue',
                                     hostname + '_' + spath,
                                     ttl=2592000)
                  print(uid + ' end ' + spath)
          except Exception as e:  # pragma: no cover
              print('file drop error: ' + str(e))