|
16 | 16 |
|
17 | 17 | app.MapPost("/scheduleJob", async (HttpContext context) => |
18 | 18 | { |
19 | | - Console.WriteLine("Scheduling job..."); |
20 | 19 | var droidJob = await JsonSerializer.DeserializeAsync<DroidJob>(context.Request.Body); |
21 | 20 | if (droidJob?.Name is null || droidJob?.Job is null) |
22 | 21 | { |
|
25 | 24 | return; |
26 | 25 | } |
27 | 26 |
|
28 | | - try { |
29 | | - var jobData = new JobData { |
| 27 | + try |
| 28 | + { |
| 29 | + var jobData = new JobData |
| 30 | + { |
30 | 31 | Droid = droidJob.Name, |
31 | 32 | Task = droidJob.Job |
32 | 33 | }; |
33 | 34 |
|
34 | 35 | await jobsClient.ScheduleJobWithPayloadAsync(droidJob.Name, DaprJobSchedule.FromDuration(TimeSpan.FromSeconds(droidJob.DueTime)), payload: jobData, repeats: 1); //Schedule cron job that repeats once |
35 | | - Console.WriteLine($"Job Scheduled: {droidJob.Name}"); |
36 | 36 |
|
| 37 | + Console.WriteLine($"Job Scheduled: {droidJob.Name}"); |
37 | 38 | context.Response.StatusCode = 200; |
38 | 39 | await context.Response.WriteAsJsonAsync(droidJob); |
39 | | - |
40 | | - } catch (Exception e) { |
| 40 | + } |
| 41 | + catch (Exception e) |
| 42 | + { |
41 | 43 | Console.WriteLine($"Error scheduling job: " + e); |
42 | 44 | } |
43 | 45 | return; |
|
46 | 48 | app.MapGet("/getJob/{name}", async (HttpContext context) => |
47 | 49 | { |
48 | 50 | var jobName = context.Request.RouteValues["name"]?.ToString(); |
49 | | - Console.WriteLine($"Getting job: " + jobName); |
50 | | - |
| 51 | + Console.WriteLine($"Getting job..."); |
| 52 | + |
51 | 53 | if (string.IsNullOrEmpty(jobName)) |
52 | 54 | { |
53 | 55 | context.Response.StatusCode = 400; |
54 | 56 | await context.Response.WriteAsync("Job name required"); |
55 | 57 | return; |
56 | 58 | } |
57 | 59 |
|
58 | | - try { |
59 | | - // Error here: ---> System.FormatException: String '' was not recognized as a valid DateTime. |
| 60 | + try |
| 61 | + { |
60 | 62 | var jobDetails = await jobsClient.GetJobAsync(jobName); |
61 | | - Console.WriteLine($"Job schedule: {jobDetails?.Schedule}"); |
62 | | - Console.WriteLine($"Job payload: {jobDetails?.Payload}"); |
63 | 63 |
|
64 | 64 | context.Response.StatusCode = 200; |
65 | 65 | await context.Response.WriteAsJsonAsync(jobDetails); |
66 | 66 |
|
67 | | - } catch (Exception e) { |
| 67 | + } |
| 68 | + catch (Exception e) |
| 69 | + { |
68 | 70 | Console.WriteLine($"Error getting job: " + e); |
69 | 71 | context.Response.StatusCode = 400; |
70 | 72 | await context.Response.WriteAsync($"Error getting job"); |
|
76 | 78 | { |
77 | 79 | var jobName = context.Request.RouteValues["name"]?.ToString(); |
78 | 80 | Console.WriteLine($"Deleting job: " + jobName); |
79 | | - |
| 81 | + |
80 | 82 | if (string.IsNullOrEmpty(jobName)) |
81 | 83 | { |
82 | 84 | context.Response.StatusCode = 400; |
83 | 85 | await context.Response.WriteAsync("Job name required"); |
84 | 86 | return; |
85 | 87 | } |
86 | 88 |
|
87 | | - try { |
| 89 | + try |
| 90 | + { |
88 | 91 | await jobsClient.DeleteJobAsync(jobName); |
89 | 92 | Console.WriteLine($"Job deleted: {jobName}"); |
90 | 93 |
|
91 | 94 | context.Response.StatusCode = 200; |
92 | 95 | await context.Response.WriteAsync("Job deleted"); |
93 | 96 |
|
94 | | - } catch (Exception e) { |
| 97 | + } |
| 98 | + catch (Exception e) |
| 99 | + { |
95 | 100 | Console.WriteLine($"Error deleting job: " + e); |
96 | 101 | context.Response.StatusCode = 400; |
97 | 102 | await context.Response.WriteAsync($"Error deleting job"); |
98 | 103 | } |
99 | 104 | return; |
100 | 105 | }); |
101 | 106 |
|
102 | | -//Job handler route to capture incoming jobs |
| 107 | +// Job handler route to capture incoming jobs |
103 | 108 | app.MapDaprScheduledJobHandler((string jobName, ReadOnlyMemory<byte> jobPayload) => |
104 | 109 | { |
105 | | - Console.WriteLine($"Received trigger invocation for job name: {jobName}"); |
| 110 | + Console.WriteLine("Handling job..."); |
106 | 111 | var deserializedPayload = Encoding.UTF8.GetString(jobPayload.Span); |
107 | 112 |
|
108 | 113 | try |
109 | 114 | { |
110 | | - if (deserializedPayload is null){ |
| 115 | + if (deserializedPayload is null) |
| 116 | + { |
111 | 117 | throw new Exception("Payload is null"); |
112 | 118 | } |
113 | 119 |
|
114 | 120 | var jobData = JsonSerializer.Deserialize<JobData>(deserializedPayload); |
115 | | - Console.WriteLine($"Received invocation for the job {jobName} with job data droid {jobData?.Droid}"); |
116 | | - |
117 | 121 | if (jobData?.Droid is null || jobData?.Task is null) |
118 | 122 | { |
119 | 123 | throw new Exception("Invalid format of job data."); |
|
122 | 126 | // Handling Droid Job from decoded value |
123 | 127 | Console.WriteLine($"Starting droid: {jobData.Droid}"); |
124 | 128 | Console.WriteLine($"Executing maintenance job: {jobData.Task}"); |
125 | | - } catch (Exception ex) |
| 129 | + } |
| 130 | + catch (Exception ex) |
126 | 131 | { |
127 | 132 | Console.WriteLine($"Failed to handle job {jobName}"); |
128 | 133 | Console.Error.WriteLine($"Error handling job: {ex.Message}"); |
@@ -150,7 +155,7 @@ public class DroidJob |
150 | 155 |
|
151 | 156 | [JsonPropertyName("job")] |
152 | 157 | public string? Job { get; set; } |
153 | | - |
| 158 | + |
154 | 159 | [JsonPropertyName("dueTime")] |
155 | 160 | public int DueTime { get; set; } |
156 | 161 | } |
|
0 commit comments