diff --git a/core/src/main/java/org/elasticsearch/rest/action/cat/RestSnapshotAction.java b/core/src/main/java/org/elasticsearch/rest/action/cat/RestSnapshotAction.java index 947da876b0b..bfe3f0faaed 100644 --- a/core/src/main/java/org/elasticsearch/rest/action/cat/RestSnapshotAction.java +++ b/core/src/main/java/org/elasticsearch/rest/action/cat/RestSnapshotAction.java @@ -26,6 +26,7 @@ import org.elasticsearch.client.Client; import org.elasticsearch.common.Table; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestRequest; @@ -33,6 +34,7 @@ import org.elasticsearch.rest.RestResponse; import org.elasticsearch.rest.action.support.RestResponseListener; import org.elasticsearch.rest.action.support.RestTable; import org.elasticsearch.snapshots.SnapshotInfo; +import org.elasticsearch.snapshots.SnapshotState; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; @@ -80,6 +82,7 @@ public class RestSnapshotAction extends AbstractCatAction { .addCell("start_time", "alias:sti,startTime;desc:start time in HH:MM:SS") .addCell("end_epoch", "alias:ete,endEpoch;desc:end time in seconds since 1970-01-01 00:00:00") .addCell("end_time", "alias:eti,endTime;desc:end time in HH:MM:SS") + .addCell("duration", "alias:dur,duration;text-align:right;desc:duration") .addCell("indices", "alias:i,indices;text-align:right;desc:number of indices") .addCell("successful_shards", "alias:ss,successful_shards;text-align:right;desc:number of successful shards") .addCell("failed_shards", "alias:fs,failed_shards;text-align:right;desc:number of failed shards") @@ -101,6 +104,13 @@ public class RestSnapshotAction extends AbstractCatAction { table.addCell(dateFormat.print(snapshotStatus.startTime())); table.addCell(TimeUnit.SECONDS.convert(snapshotStatus.endTime(), TimeUnit.MILLISECONDS)); table.addCell(dateFormat.print(snapshotStatus.endTime())); + final long durationMillis; + if (snapshotStatus.state() == SnapshotState.IN_PROGRESS) { + durationMillis = System.currentTimeMillis() - snapshotStatus.startTime(); + } else { + durationMillis = snapshotStatus.endTime() - snapshotStatus.startTime(); + } + table.addCell(TimeValue.timeValueMillis(durationMillis)); table.addCell(snapshotStatus.indices().size()); table.addCell(snapshotStatus.successfulShards()); table.addCell(snapshotStatus.failedShards()); diff --git a/docs/reference/cat/snapshots.asciidoc b/docs/reference/cat/snapshots.asciidoc index 981788abf9c..3d34cd51e6d 100644 --- a/docs/reference/cat/snapshots.asciidoc +++ b/docs/reference/cat/snapshots.asciidoc @@ -8,9 +8,9 @@ Querying the snapshots of a repository named `repo1` then looks as follows. [source,sh] -------------------------------------------------- % curl 'localhost:9200/_cat/snapshots/repo1?v' -id status start_epoch start_time end_epoch end_time indices successful_shards failed_shards total_shards -snap1 FAILED 1445616705 18:11:45 1445616978 18:16:18 1 4 1 5 -snap2 SUCCESS 1445634298 23:04:58 1445634672 23:11:12 2 10 0 10 +id status start_epoch start_time end_epoch end_time duration indices successful_shards failed_shards total_shards +snap1 FAILED 1445616705 18:11:45 1445616978 18:16:18 4.6m 1 4 1 5 +snap2 SUCCESS 1445634298 23:04:58 1445634672 23:11:12 6.2m 2 10 0 10 -------------------------------------------------- Each snapshot contains information about when it was started and stopped. diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/cat.snapshots/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/cat.snapshots/10_basic.yaml index 4a4207fd629..c1a1fc97011 100755 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/cat.snapshots/10_basic.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/cat.snapshots/10_basic.yaml @@ -13,6 +13,7 @@ start_time .+ \n end_epoch .+ \n end_time .+ \n + duration .+ \n indices .+ \n successful_shards .+ \n failed_shards .+ \n @@ -74,6 +75,6 @@ - match: $body: | - /^ snap1\s+ SUCCESS\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ 2\s+ 2\s+ 0\s+ 2\s*\n - snap2\s+ SUCCESS\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ 2\s+ 2\s+ 0\s+ 2\s*\n + /^ snap1\s+ SUCCESS\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \S+\s+ 2\s+ 2\s+ 0\s+ 2\s*\n + snap2\s+ SUCCESS\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \d+\s+ \d\d\:\d\d\:\d\d\s+ \S+\s+ 2\s+ 2\s+ 0\s+ 2\s*\n $/