/* * Licensed to CRATE.IO GmbH ("Crate") under one or more contributor * license agreements. See the NOTICE file distributed with this work for * additional information regarding copyright ownership. Crate 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. * * However, if you have executed another commercial license agreement * with Crate these terms will supersede the license and you may use the * software solely pursuant to the terms of the relevant commercial agreement. */ package io.crate.operation.reference.sys.snapshot; import com.google.common.base.Function; import com.google.common.collect.Lists; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.inject.Singleton; import org.elasticsearch.repositories.RepositoriesService; import org.elasticsearch.repositories.Repository; import org.elasticsearch.snapshots.SnapshotId; import org.elasticsearch.snapshots.SnapshotInfo; import org.elasticsearch.snapshots.SnapshotsService; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; @Singleton public class SysSnapshots { private final SnapshotsService snapshotsService; private final RepositoriesService repositoriesService; @Inject public SysSnapshots(SnapshotsService snapshotsService, RepositoriesService repositoriesService) { this.snapshotsService = snapshotsService; this.repositoriesService = repositoriesService; } public Iterable<SysSnapshot> snapshotsGetter() { List<SysSnapshot> sysSnapshots = new ArrayList<>(); for (Repository repository : repositoriesService.getRepositoriesList()) { final String repositoryName = repository.getMetadata().name(); List<SnapshotId> snapshotIds = repositoriesService.repository(repositoryName).getRepositoryData().getSnapshotIds(); List<SnapshotInfo> snapshots = snapshotsService.snapshots(repositoryName, snapshotIds, true); sysSnapshots.addAll(Lists.transform(snapshots, new Function<SnapshotInfo, SysSnapshot>() { @Nullable @Override public SysSnapshot apply(@Nullable SnapshotInfo snapshot) { if (snapshot == null) { return null; } return new SysSnapshot( snapshot.snapshotId().getName(), repositoryName, snapshot.indices(), snapshot.startTime(), snapshot.endTime(), snapshot.version().toString(), snapshot.state().name() ); } })); } return sysSnapshots; } }