/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you 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 org.elasticsearch.action.admin.cluster.snapshots.status;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import java.io.IOException;
import java.util.Collection;
/**
* Status of a snapshot shards
*/
public class SnapshotShardsStats implements ToXContent {
private int initializingShards;
private int startedShards;
private int finalizingShards;
private int doneShards;
private int failedShards;
private int totalShards;
SnapshotShardsStats(Collection<SnapshotIndexShardStatus> shards) {
for (SnapshotIndexShardStatus shard : shards) {
totalShards++;
switch (shard.getStage()) {
case INIT:
initializingShards++;
break;
case STARTED:
startedShards++;
break;
case FINALIZE:
finalizingShards++;
break;
case DONE:
doneShards++;
break;
case FAILURE:
failedShards++;
break;
default:
throw new IllegalArgumentException("Unknown stage type " + shard.getStage());
}
}
}
/**
* Number of shards with the snapshot in the initializing stage
*/
public int getInitializingShards() {
return initializingShards;
}
/**
* Number of shards with the snapshot in the started stage
*/
public int getStartedShards() {
return startedShards;
}
/**
* Number of shards with the snapshot in the finalizing stage
*/
public int getFinalizingShards() {
return finalizingShards;
}
/**
* Number of shards with completed snapshot
*/
public int getDoneShards() {
return doneShards;
}
/**
* Number of shards with failed snapshot
*/
public int getFailedShards() {
return failedShards;
}
/**
* Total number of shards
*/
public int getTotalShards() {
return totalShards;
}
static final class Fields {
static final String SHARDS_STATS = "shards_stats";
static final String INITIALIZING = "initializing";
static final String STARTED = "started";
static final String FINALIZING = "finalizing";
static final String DONE = "done";
static final String FAILED = "failed";
static final String TOTAL = "total";
}
@Override
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
builder.startObject(Fields.SHARDS_STATS);
builder.field(Fields.INITIALIZING, getInitializingShards());
builder.field(Fields.STARTED, getStartedShards());
builder.field(Fields.FINALIZING, getFinalizingShards());
builder.field(Fields.DONE, getDoneShards());
builder.field(Fields.FAILED, getFailedShards());
builder.field(Fields.TOTAL, getTotalShards());
builder.endObject();
return builder;
}
}