    001/*
    002 * Copyright (c) 2007-2016 Concurrent, Inc. All Rights Reserved.
    003 *
    004 * Project and contact information: http://www.cascading.org/
    005 *
    006 * This file is part of the Cascading project.
    007 *
    008 * Licensed under the Apache License, Version 2.0 (the "License");
    009 * you may not use this file except in compliance with the License.
    010 * You may obtain a copy of the License at
    011 *
    012 *     http://www.apache.org/licenses/LICENSE-2.0
    013 *
    014 * Unless required by applicable law or agreed to in writing, software
    015 * distributed under the License is distributed on an "AS IS" BASIS,
    016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    017 * See the License for the specific language governing permissions and
    018 * limitations under the License.
    019 */
    020
    021package cascading.stats;
    022
    023import java.util.Map;
    024
    025/**
    026 * Typically CascadingStats objects have an internal state model with timings, the FlowSliceStats is a simplified
    027 * Stats object and only reports what the underlying platform reports, not the client side observations.
    028 * <p/>
    029 * Implementations may optionally implement the {@link cascading.stats.ProvidesCounters} interface.
    030 * <p/>
    031 * FlowSliceStats is provided as an abstract class so that implementations will be resilient to API additions.
    032 * <p/>
    033 * <ul>
    034 * <li>pendingTime - when the slice is created</li>
    035 * <li>startTime - when the slice was told to begin work</li>
    036 * <li>submitTime - when the slice was submitted to a work queue</li>
    037 * <li>runTime - when work began</li>
    038 * <li>finishedTime - when work ended</li>
    039 * </ul>
    040 * <p/>
    041 * pending is mostly irrelevant and unavailable, start, submit, and runtime are by default synonymous at the slice level
    042 * <p/>
    043 * All methods with the word 'process' like {@link #getProcessID()}, refer to the underlying implementations value.
    044 * In this example, processID is the task id this slice actually represents, where the id ({@link #getID()} is a local
    045 * guid not related to the platform implementation id to guarantee uniqueness.
    046 */
    047public abstract class FlowSliceStats<K extends Enum>
    048  {
    049  public abstract static class FlowSliceAttempt
    050    {
    051    public String getProcessID()
    052      {
    053      return getProcessAttemptID();
    054      }
    055
    056    public abstract String getProcessAttemptID();
    057
    058    public abstract int getEventId();
    059
    060    public abstract int getProcessDuration();
    061
    062    public abstract String getProcessStatus();
    063
    064    public abstract String getStatusURL();
    065
    066    public abstract CascadingStats.Status getStatus();
    067
    068    public abstract String getProcessHostname();
    069    }
    070
    071  public abstract String getID();
    072
    073  public long getProcessPendingTime()
    074    {
    075    return -1;
    076    }
    077
    078  public abstract long getProcessStartTime();
    079
    080  public long getProcessSubmitTime()
    081    {
    082    return getProcessStartTime();
    083    }
    084
    085  public long getProcessRunTime()
    086    {
    087    return getProcessStartTime();
    088    }
    089
    090  public abstract long getProcessFinishTime();
    091
    092  public abstract CascadingStats.Status getStatus();
    093
    094  public abstract K getKind();
    095
    096  public String getProcessID()
    097    {
    098    return getProcessSliceID();
    099    }
    100
    101  public abstract String getProcessSliceID();
    102
    103  public abstract String getProcessNodeID();
    104
    105  public abstract String getProcessStepID();
    106
    107  public abstract String getProcessStatus();
    108
    109  public abstract float getProcessProgress();
    110
    111  public abstract String[] getDiagnostics();
    112
    113  public abstract Map<String, Map<String, Long>> getCounters();
    114
    115  public abstract Map<Integer, FlowSliceAttempt> getAttempts();
    116  }