Skip to content

Commit

Permalink
Schedule Job API
Browse files Browse the repository at this point in the history
  • Loading branch information
charan2628 committed Aug 21, 2024
1 parent 1681816 commit b167c08
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 0 deletions.
12 changes: 12 additions & 0 deletions sdk/src/main/java/io/dapr/client/DaprClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import io.dapr.client.domain.HttpExtension;
import io.dapr.client.domain.InvokeBindingRequest;
import io.dapr.client.domain.InvokeMethodRequest;
import io.dapr.client.domain.Job;
import io.dapr.client.domain.PublishEventRequest;
import io.dapr.client.domain.SaveStateRequest;
import io.dapr.client.domain.State;
Expand All @@ -44,6 +45,8 @@
import java.util.Map;
import java.util.function.Function;

import com.google.protobuf.Message;

/**
* Generic Client Adapter to be used regardless of the GRPC or the HTTP Client implementation required.
*
Expand Down Expand Up @@ -662,6 +665,15 @@ Flux<SubscribeConfigurationResponse> subscribeConfiguration(String storeName, Li
* @return Mono of {@link UnsubscribeConfigurationResponse} instance.
*/
Mono<UnsubscribeConfigurationResponse> unsubscribeConfiguration(UnsubscribeConfigurationRequest request);

/**
* ScheduleJobAlpha1 creates and schedules a job.
*
* @param <T> The type of the data for the job.
* @param job job to be scheduled
* @return a Mono plan of type Void.
*/
<T extends Message> Mono<Void> scheduleJobAlpha1(Job<T> job);

/**
* Returns a newly created gRPC stub with proper interceptors and channel for gRPC proxy invocation.
Expand Down
44 changes: 44 additions & 0 deletions sdk/src/main/java/io/dapr/client/DaprClientImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@
package io.dapr.client;

import com.google.common.base.Strings;
import com.google.protobuf.Any;
import com.google.protobuf.ByteString;
import com.google.protobuf.Empty;
import com.google.protobuf.Message;
import io.dapr.client.domain.ActorMetadata;
import io.dapr.client.domain.AppConnectionPropertiesHealthMetadata;
import io.dapr.client.domain.AppConnectionPropertiesMetadata;
Expand All @@ -37,6 +39,7 @@
import io.dapr.client.domain.HttpExtension;
import io.dapr.client.domain.InvokeBindingRequest;
import io.dapr.client.domain.InvokeMethodRequest;
import io.dapr.client.domain.Job;
import io.dapr.client.domain.LockRequest;
import io.dapr.client.domain.PublishEventRequest;
import io.dapr.client.domain.QueryStateItem;
Expand Down Expand Up @@ -1175,6 +1178,47 @@ public Mono<UnsubscribeConfigurationResponse> unsubscribeConfiguration(Unsubscri
}
}

@Override
public <T extends Message> Mono<Void> scheduleJobAlpha1(Job<T> job) {
try {
final String name = job.getName();
final T data = job.getData();

if (name == null || name.trim().isEmpty()) {
throw new IllegalArgumentException("Job name cannot be null or empty");
}
if (data == null) {
throw new IllegalArgumentException("Job data cannot be empty");
}

DaprProtos.Job.Builder jobBuilder = DaprProtos.Job.newBuilder()
.setName(name)
.setData(Any.pack(data));
if (job.getSchedule() != null && !job.getSchedule().trim().isEmpty()) {
jobBuilder.setSchedule(job.getSchedule());
}
if (job.getRepeats() != null) {
jobBuilder.setRepeats(job.getRepeats());
}
if (job.getDueTime() != null && !job.getDueTime().trim().isEmpty()) {
jobBuilder.setDueTime(job.getDueTime());
}
if (job.getTtl() != null && !job.getTtl().trim().isEmpty()) {
jobBuilder.setTtl(job.getTtl());
}

DaprProtos.ScheduleJobRequest.Builder builder =
DaprProtos.ScheduleJobRequest.newBuilder()
.setJob(jobBuilder.build());

return this.<DaprProtos.ScheduleJobResponse>createMono(
it -> intercept(null, asyncStub).scheduleJobAlpha1(builder.build(), it))
.then();
} catch (Exception ex) {
return DaprException.wrapMono(ex);
}
}

/**
* Build a new Configuration Item from provided parameter.
*
Expand Down
74 changes: 74 additions & 0 deletions sdk/src/main/java/io/dapr/client/domain/Job.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package io.dapr.client.domain;

import com.google.protobuf.Message;

/**
* A Job to schedule
*
* @param <T> The class type of Job data.
*/
public final class Job<T extends Message> {

private final String name;

private String schedule;

private Integer repeats;

private String dueTime;

private String ttl;

private final T data;

/**
* Constructor for Job
*
* @param name name of the job to create
*/
public Job(String name, T data) {
super();
this.name = name;
this.data = data;
}

public String getSchedule() {
return schedule;
}

public void setSchedule(String schedule) {
this.schedule = schedule;
}

public Integer getRepeats() {
return repeats;
}

public void setRepeats(Integer repeats) {
this.repeats = repeats;
}

public String getDueTime() {
return dueTime;
}

public void setDueTime(String dueTime) {
this.dueTime = dueTime;
}

public String getTtl() {
return ttl;
}

public void setTtl(String ttl) {
this.ttl = ttl;
}

public T getData() {
return data;
}

public String getName() {
return name;
}
}

0 comments on commit b167c08

Please sign in to comment.