001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.apache.hadoop.hbase.monitoring;
019
020import java.io.IOException;
021import java.util.List;
022import java.util.Map;
023import org.apache.yetus.audience.InterfaceAudience;
024
025@InterfaceAudience.Private
026public interface MonitoredTask extends Cloneable {
027  enum State {
028    RUNNING,
029    WAITING,
030    COMPLETE,
031    ABORTED
032  }
033
034  public interface StatusJournalEntry {
035    String getStatus();
036
037    long getTimeStamp();
038  }
039
040  long getStartTime();
041
042  String getDescription();
043
044  String getStatus();
045
046  long getStatusTime();
047
048  State getState();
049
050  long getStateTime();
051
052  long getCompletionTimestamp();
053
054  long getWarnTime();
055
056  void markComplete(String msg);
057
058  void pause(String msg);
059
060  void resume(String msg);
061
062  void abort(String msg);
063
064  void expireNow();
065
066  void setStatus(String status);
067
068  void setDescription(String description);
069
070  void setWarnTime(final long t);
071
072  /**
073   * If journal is enabled, we will store all statuses that have been set along with the time stamps
074   * when they were set. This method will give you all the journals stored so far.
075   */
076  List<StatusJournalEntry> getStatusJournal();
077
078  String prettyPrintJournal();
079
080  /**
081   * Explicitly mark this status as able to be cleaned up, even though it might not be complete.
082   */
083  void cleanup();
084
085  /**
086   * Public exposure of Object.clone() in order to allow clients to easily capture current state.
087   * @return a copy of the object whose references will not change
088   */
089  MonitoredTask clone();
090
091  /**
092   * Creates a string map of internal details for extensible exposure of monitored tasks.
093   * @return A Map containing information for this task.
094   */
095  Map<String, Object> toMap() throws IOException;
096
097  /**
098   * Creates a JSON object for parseable exposure of monitored tasks.
099   * @return An encoded JSON object containing information for this task.
100   */
101  String toJSON() throws IOException;
102
103}