/* * Copyright 1999-2015 dangdang.com. * <p> * 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. * </p> */ package com.dangdang.ddframe.job.lite.console.restful; import com.dangdang.ddframe.job.lite.console.service.JobAPIService; import com.dangdang.ddframe.job.lite.console.service.impl.JobAPIServiceImpl; import com.dangdang.ddframe.job.lite.lifecycle.domain.ShardingInfo; import com.dangdang.ddframe.job.lite.lifecycle.domain.JobBriefInfo; import com.google.common.base.Optional; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.util.Collection; /** * 作业维度操作的RESTful API. * * @author caohao */ @Path("/jobs") public final class JobOperationRestfulApi { private JobAPIService jobAPIService = new JobAPIServiceImpl(); /** * 获取作业总数. * * @return 作业总数 */ @GET @Path("/count") public int getJobsTotalCount() { return jobAPIService.getJobStatisticsAPI().getJobsTotalCount(); } /** * 获取作业详情. * * @return 作业详情集合 */ @GET @Produces(MediaType.APPLICATION_JSON) public Collection<JobBriefInfo> getAllJobsBriefInfo() { return jobAPIService.getJobStatisticsAPI().getAllJobsBriefInfo(); } /** * 触发作业. * * @param jobName 作业名称 */ @POST @Path("/{jobName}/trigger") public void triggerJob(@PathParam("jobName") final String jobName) { jobAPIService.getJobOperatorAPI().trigger(Optional.of(jobName), Optional.<String>absent()); } /** * 禁用作业. * * @param jobName 作业名称 */ @POST @Path("/{jobName}/disable") @Consumes(MediaType.APPLICATION_JSON) public void disableJob(@PathParam("jobName") final String jobName) { jobAPIService.getJobOperatorAPI().disable(Optional.of(jobName), Optional.<String>absent()); } /** * 启用作业. * * @param jobName 作业名称 */ @DELETE @Path("/{jobName}/disable") @Consumes(MediaType.APPLICATION_JSON) public void enableJob(@PathParam("jobName") final String jobName) { jobAPIService.getJobOperatorAPI().enable(Optional.of(jobName), Optional.<String>absent()); } /** * 终止作业. * * @param jobName 作业名称 */ @POST @Path("/{jobName}/shutdown") @Consumes(MediaType.APPLICATION_JSON) public void shutdownJob(@PathParam("jobName") final String jobName) { jobAPIService.getJobOperatorAPI().shutdown(Optional.of(jobName), Optional.<String>absent()); } /** * 获取分片信息. * * @param jobName 作业名称 * @return 分片信息集合 */ @GET @Path("/{jobName}/sharding") @Produces(MediaType.APPLICATION_JSON) public Collection<ShardingInfo> getShardingInfo(@PathParam("jobName") final String jobName) { return jobAPIService.getShardingStatisticsAPI().getShardingInfo(jobName); } @POST @Path("/{jobName}/sharding/{item}/disable") @Consumes(MediaType.APPLICATION_JSON) public void disableSharding(@PathParam("jobName") final String jobName, @PathParam("item") final String item) { jobAPIService.getShardingOperateAPI().disable(jobName, item); } @DELETE @Path("/{jobName}/sharding/{item}/disable") @Consumes(MediaType.APPLICATION_JSON) public void enableSharding(@PathParam("jobName") final String jobName, @PathParam("item") final String item) { jobAPIService.getShardingOperateAPI().enable(jobName, item); } }