io.cassandrareaper.resources.view.RepairRunStatus.java Source code

Java tutorial

Introduction

Here is the source code for io.cassandrareaper.resources.view.RepairRunStatus.java

Source

/*
 * 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 io.cassandrareaper.resources.view;

import io.cassandrareaper.core.RepairRun;
import io.cassandrareaper.core.RepairUnit;

import java.util.Collection;
import java.util.UUID;

import javax.annotation.Nullable;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.cassandra.repair.RepairParallelism;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.format.ISODateTimeFormat;

/**
 * Contains the data to be shown when querying repair run status.
 */
public final class RepairRunStatus {

    @JsonProperty
    private String cause;

    @JsonProperty
    private String owner;

    @JsonProperty
    private UUID id;

    @JsonProperty("cluster_name")
    private String clusterName;

    @JsonProperty("column_families")
    private Collection<String> columnFamilies;

    @JsonProperty("keyspace_name")
    private String keyspaceName;

    @JsonProperty
    private RepairRun.RunState state;

    @JsonIgnore
    private DateTime creationTime;

    @JsonIgnore
    private DateTime startTime;

    @JsonIgnore
    private DateTime endTime;

    @JsonIgnore
    private DateTime pauseTime;

    @JsonIgnore
    private DateTime currentTime;

    @JsonProperty
    private double intensity;

    @JsonProperty("incremental_repair")
    private boolean incrementalRepair;

    @JsonProperty("total_segments")
    private int totalSegments;

    @JsonProperty("repair_parallelism")
    private RepairParallelism repairParallelism;

    @JsonProperty("segments_repaired")
    private int segmentsRepaired;

    @JsonProperty("last_event")
    private String lastEvent;

    @JsonProperty
    private String duration;

    @JsonIgnore
    private DateTime estimatedTimeOfArrival;

    @JsonProperty("nodes")
    private Collection<String> nodes;

    @JsonProperty("datacenters")
    private Collection<String> datacenters;

    @JsonProperty("blacklisted_tables")
    private Collection<String> blacklistedTables;

    @JsonProperty("repair_thread_count")
    private int repairThreadCount;

    /**
     * Default public constructor Required for Jackson JSON parsing.
     */
    public RepairRunStatus() {
    }

    public RepairRunStatus(UUID runId, String clusterName, String keyspaceName, Collection<String> columnFamilies,
            int segmentsRepaired, int totalSegments, RepairRun.RunState state, DateTime startTime, DateTime endTime,
            String cause, String owner, String lastEvent, DateTime creationTime, DateTime pauseTime,
            double intensity, boolean incrementalRepair, RepairParallelism repairParallelism,
            Collection<String> nodes, Collection<String> datacenters, Collection<String> blacklistedTables,
            int repairThreadCount) {

        this.id = runId;
        this.cause = cause;
        this.owner = owner;
        this.clusterName = clusterName;
        this.columnFamilies = columnFamilies;
        this.keyspaceName = keyspaceName;
        this.state = state;
        this.creationTime = creationTime;
        this.startTime = startTime;
        this.endTime = endTime;
        this.pauseTime = pauseTime;
        this.currentTime = DateTime.now();
        this.intensity = roundDoubleNicely(intensity);
        this.incrementalRepair = incrementalRepair;
        this.totalSegments = totalSegments;
        this.repairParallelism = repairParallelism;
        this.segmentsRepaired = segmentsRepaired;
        this.lastEvent = lastEvent;

        this.nodes = nodes;
        this.datacenters = datacenters;
        this.blacklistedTables = blacklistedTables;
        this.repairThreadCount = repairThreadCount;

        if (startTime == null) {
            duration = null;
        } else {
            if (state == RepairRun.RunState.RUNNING || state == RepairRun.RunState.PAUSED) {
                duration = DurationFormatUtils.formatDurationWords(
                        new Duration(startTime.toInstant(), currentTime.toInstant()).getMillis(), true, false);
            } else if (state == RepairRun.RunState.ABORTED) {
                duration = DurationFormatUtils.formatDurationWords(
                        new Duration(startTime.toInstant(), pauseTime.toInstant()).getMillis(), true, false);
            } else if (endTime != null) {
                duration = DurationFormatUtils.formatDurationWords(
                        new Duration(startTime.toInstant(), endTime.toInstant()).getMillis(), true, false);
            } else {
                duration = null;
            }
        }

        if (startTime == null) {
            estimatedTimeOfArrival = null;
        } else {
            if (state == RepairRun.RunState.ERROR || state == RepairRun.RunState.DELETED
                    || state == RepairRun.RunState.ABORTED || segmentsRepaired == 0) {
                estimatedTimeOfArrival = null;
            } else {
                long now = DateTime.now().getMillis();
                long currentDuration = now - startTime.getMillis();
                long millisecondsPerSegment = currentDuration / segmentsRepaired;
                int segmentsLeft = totalSegments - segmentsRepaired;
                estimatedTimeOfArrival = new DateTime(now + millisecondsPerSegment * segmentsLeft);
            }
        }
    }

    public RepairRunStatus(RepairRun repairRun, RepairUnit repairUnit, int segmentsRepaired) {
        this(repairRun.getId(), repairRun.getClusterName(), repairUnit.getKeyspaceName(),
                repairUnit.getColumnFamilies(), segmentsRepaired, repairRun.getSegmentCount(),
                repairRun.getRunState(), repairRun.getStartTime(), repairRun.getEndTime(), repairRun.getCause(),
                repairRun.getOwner(), repairRun.getLastEvent(), repairRun.getCreationTime(),
                repairRun.getPauseTime(), repairRun.getIntensity(), repairUnit.getIncrementalRepair(),
                repairRun.getRepairParallelism(), repairUnit.getNodes(), repairUnit.getDatacenters(),
                repairUnit.getBlacklistedTables(), repairUnit.getRepairThreadCount());
    }

    @JsonProperty("creation_time")
    public String getCreationTimeIso8601() {
        return dateTimeToIso8601(creationTime);
    }

    @JsonProperty("creation_time")
    public void setCreationTimeIso8601(String dateStr) {
        if (null != dateStr) {
            creationTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    @JsonProperty("start_time")
    public String getStartTimeIso8601() {
        return dateTimeToIso8601(startTime);
    }

    @JsonProperty("start_time")
    public void setStartTimeIso8601(String dateStr) {
        if (null != dateStr) {
            startTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    @JsonProperty("end_time")
    public String getEndTimeIso8601() {
        return dateTimeToIso8601(endTime);
    }

    @JsonProperty("end_time")
    public void setEndTimeIso8601(String dateStr) {
        if (null != dateStr) {
            endTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    @JsonProperty("pause_time")
    public String getPauseTimeIso8601() {
        return dateTimeToIso8601(pauseTime);
    }

    @JsonProperty("pause_time")
    public void setPauseTimeIso8601(String dateStr) {
        if (null != dateStr) {
            pauseTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    @JsonProperty("current_time")
    public void setCurrentTimeIso8601(String dateStr) {
        if (null != dateStr) {
            currentTime = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    @JsonProperty("current_time")
    public String getCurrentTimeIso8601() {
        return dateTimeToIso8601(currentTime);
    }

    public String getCause() {
        return cause;
    }

    public void setCause(String cause) {
        this.cause = cause;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }

    public String getClusterName() {
        return clusterName;
    }

    public void setClusterName(String clusterName) {
        this.clusterName = clusterName;
    }

    public Collection<String> getColumnFamilies() {
        return columnFamilies;
    }

    public void setColumnFamilies(Collection<String> columnFamilies) {
        this.columnFamilies = columnFamilies;
    }

    public String getKeyspaceName() {
        return keyspaceName;
    }

    public void setKeyspaceName(String keyspaceName) {
        this.keyspaceName = keyspaceName;
    }

    public RepairRun.RunState getState() {
        return state;
    }

    public void setState(RepairRun.RunState runState) {
        this.state = runState;
    }

    public DateTime getCreationTime() {
        return creationTime;
    }

    public void setCreationTime(DateTime creationTime) {
        this.creationTime = creationTime;
    }

    public DateTime getStartTime() {
        return startTime;
    }

    public void setStartTime(DateTime startTime) {
        this.startTime = startTime;
    }

    public DateTime getEndTime() {
        return endTime;
    }

    public void setEndTime(DateTime endTime) {
        this.endTime = endTime;
    }

    public DateTime getPauseTime() {
        return pauseTime;
    }

    public void setPauseTime(DateTime pauseTime) {
        this.pauseTime = pauseTime;
    }

    public DateTime getCurrentTime() {
        return currentTime;
    }

    public void setCurrentTime(DateTime currentTime) {
        this.currentTime = currentTime;
    }

    public double getIntensity() {
        return intensity;
    }

    public void setIntensity(double intensity) {
        this.intensity = intensity;
    }

    public boolean getIncrementalRepair() {
        return incrementalRepair;
    }

    public void setIncrementalRepair(boolean incrementalRepair) {
        this.incrementalRepair = incrementalRepair;
    }

    public int getTotalSegments() {
        return totalSegments;
    }

    public void setTotalSegments(int segmentCount) {
        this.totalSegments = segmentCount;
    }

    public RepairParallelism getRepairParallelism() {
        return repairParallelism;
    }

    public void setRepairParallelism(RepairParallelism repairParallelism) {
        this.repairParallelism = repairParallelism;
    }

    public int getSegmentsRepaired() {
        return segmentsRepaired;
    }

    public void setSegmentsRepaired(int segmentsRepaired) {
        this.segmentsRepaired = segmentsRepaired;
    }

    public String getLastEvent() {
        return lastEvent;
    }

    public void setLastEvent(String lastEvent) {
        this.lastEvent = lastEvent;
    }

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    }

    @JsonProperty("estimated_time_of_arrival")
    public String getEstimatedTimeOfArrivalIso8601() {
        return dateTimeToIso8601(estimatedTimeOfArrival);
    }

    @JsonProperty("estimated_time_of_arrival")
    public void setEstimatedTimeOfArrivalIso8601(String dateStr) {
        if (null != dateStr) {
            estimatedTimeOfArrival = ISODateTimeFormat.dateTimeNoMillis().parseDateTime(dateStr);
        }
    }

    public Collection<String> getNodes() {
        return nodes;
    }

    public void setNodes(Collection<String> nodes) {
        this.nodes = nodes;
    }

    public Collection<String> getDatacenters() {
        return datacenters;
    }

    public void setDatacenters(Collection<String> datacenters) {
        this.datacenters = datacenters;
    }

    @JsonProperty("blacklisted_tables")
    public Collection<String> getBlacklistedTables() {
        return blacklistedTables;
    }

    public void setBlacklistedTables(Collection<String> blacklistedTables) {
        this.blacklistedTables = blacklistedTables;
    }

    public int getRepairThreadCount() {
        return repairThreadCount;
    }

    public void setRepairThreadCount(int repairThreadCount) {
        this.repairThreadCount = repairThreadCount;
    }

    static double roundDoubleNicely(double intensity) {
        return Math.round(intensity * 10000f) / 10000f;
    }

    @Nullable
    public static String dateTimeToIso8601(@Nullable DateTime dateTime) {
        return null != dateTime ? ISODateTimeFormat.dateTimeNoMillis().print(dateTime) : null;
    }
}