/*
 * Copyright 2013-present Facebook, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package com.facebook.buck.event;

import com.google.common.annotations.VisibleForTesting;

public interface BuckEvent {
  @VisibleForTesting
  void configure(long timestamp, long nanoTime, long threadId);

  long getTimestamp();

  long getNanoTime();

  String toLogMessage();

  long getThreadId();

  /**
   * @return Whether or not this event is a pair of another event.  Events that are pairs if they
   * pertain to the same event, for example if they are measuring the start and stop of some phase.
   * For example,
   * <pre>
   *   <code>
   *    (CommandEvent.started("build")).eventsArePair(CommandEvent.finished("build")) == true
   *    (CommandEvent.started("build")).eventsArePair(CommandEvent.started("build")) == true
   *    (CommandEvent.started("build")).eventsArePair(CommandEvent.finished("install")) == false
   *   </code>
   * </pre>
   * This should be used to pair start events to finished events.
   */
  boolean eventsArePair(BuckEvent event);
}
