def esGetEvents(args):
    '''
  Query the ES instance for events (default=read)

  Returns logevents that have
    beat.name = eventlog
    formatType = "data"
    have a sessionid
    and event is "read"

  Args:
    args: the parsed arguments from ArgumentParser

  Returns:
    exit code
  '''
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    d_start, d_end = getDateStartEnd(args)
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()
    fields = None
    if args.fields is not None:
        fields = args.fields.split(",")
        fields = [field.strip() for field in fields]
    events, nhits = elastic.getEvents(limit=args.limit,
                                      date_start=d_start,
                                      date_end=d_end,
                                      fields=fields)
    print("Numer of hits: {}".format(nhits))
    print(json.dumps(events, indent=2))
    return 0
def esGetSessions(args):
    '''

  Args:
    args:

  Returns:

  '''
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    d_start, d_end = getDateStartEnd(args)
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()
    sessions, nsessions = elastic.getSessions(limit=args.limit,
                                              date_start=d_start,
                                              date_end=d_end,
                                              min_aggs=args.minaggs)
    print("Number of sessions matching request: {}".format(nsessions))
    print(
        "SessionId   Count                   Start-time                      End-time    d-min"
    )
    for session in sessions:
        row = [0, 0, 0, 0, 0]
        dt = session[3] - session[2]
        row[0] = session[0]
        row[1] = session[1]
        row[2] = session[2].isoformat()
        row[3] = session[3].isoformat()
        row[4] = dt.days + dt.seconds / (24 * 60 * 60)
        row[4] = row[4] * (24 * 60)
        print("{0:>9}{1:>8}{2:>30}{3:>30}{4:8.2f}".format(*row))
def esGetSearches(args):
    '''
  Query the ES instance for "searches"

  By default this issues a query looking for:
     log events
     from the search beat
     with a sessionid
     and message matches "/cn/v2/query/solr/"

  Args:
    args: the parsed arguments from ArgumentParser

  Returns:
    exit code

  '''
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    d_start, d_end = getDateStartEnd(args)
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()
    events, nhits = elastic.getSearches(limit=args.limit,
                                        date_start=d_start,
                                        date_end=d_end)
    print("Numer of hits: {}".format(nhits))
    print(json.dumps(events, indent=2))
    return 0
def esComputeSessions(args):
    '''
  Compute session information for events.
  Args:
    args:

  Returns:

  '''
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()
    elastic.computeSessions(dry_run=args.dryrun)
def esCheck(args):
    '''
  Dump some stats about the ES instance
  Args:
    args:

  Returns:

  '''
    #Get a logger with the current method name
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()
    print(json.dumps(elastic.getInfo(show_mappings=args.verbose), indent=2))
    return 0
def esProcessEvents(args):
    _L = logging.getLogger(sys._getframe().f_code.co_name + "()")
    elastic = metricselasticsearch.MetricsElasticSearch(args.config)
    elastic.connect()

    return 0