Skip to content

Commit

Permalink
fix(tasks): also send failure mails when failing jobs are scheduled (#…
Browse files Browse the repository at this point in the history
…4554)

* Create host url in Webservice and pass to TaskService

* Updated tests

* Removed unused exception
  • Loading branch information
harmbrugge authored Dec 17, 2024
1 parent 981a44c commit 4e9f3de
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,14 @@ public byte[] getOutput() {
}

private String getJobUrl() {
return this.serverUrl.toExternalForm()
+ "/"
+ Constants.SYSTEM_SCHEMA
+ "/tasks/#/jobs?id="
+ this.getId();
if (serverUrl != null) {
return this.serverUrl.toExternalForm()
+ "/"
+ Constants.SYSTEM_SCHEMA
+ "/tasks/#/jobs?id="
+ this.getId();
}
return null;
}

public ScriptTask setServerUrl(URL url) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.molgenis.emx2.tasks;

import java.net.URL;
import java.util.Collection;
import java.util.List;
import java.util.Set;
Expand All @@ -12,8 +11,6 @@ public interface TaskService {

String submitTaskFromName(String name, String parameters);

String submitTaskFromName(String name, String parameters, URL host);

Set<String> getJobIds();

Task getTask(String id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@
public class TaskServiceInDatabase extends TaskServiceInMemory {
private SqlDatabase database;
private String systemSchemaName;
private URL hostUrl;

public TaskServiceInDatabase(String systemSchemaName) {
public TaskServiceInDatabase(String systemSchemaName, URL hostUrl) {
this.database = new SqlDatabase(false);
this.systemSchemaName = systemSchemaName;
this.hostUrl = hostUrl;
this.init();
}

Expand Down Expand Up @@ -90,7 +92,7 @@ public Task getTaskFromDatabase(String id) {
}

@Override
public String submitTaskFromName(String scriptName, String parameters, URL url) {
public String submitTaskFromName(String scriptName, String parameters) {
StringBuilder result = new StringBuilder();
String defaultUser = database.getActiveUser();
database.tx(
Expand All @@ -99,7 +101,7 @@ public String submitTaskFromName(String scriptName, String parameters, URL url)
Schema systemSchema = db.getSchema(this.systemSchemaName);

ScriptTask scriptTask = retrieveTaskFromDatabase(systemSchema, scriptName);
scriptTask.setServerUrl(url);
scriptTask.setServerUrl(hostUrl);
String user =
scriptTask.getCronUserName() == null ? defaultUser : scriptTask.getCronUserName();

Expand All @@ -118,11 +120,6 @@ public String submitTaskFromName(String scriptName, String parameters, URL url)
return result.toString();
}

@Override
public String submitTaskFromName(final String scriptName, final String parameters) {
return submitTaskFromName(scriptName, parameters, null);
}

private ScriptTask retrieveTaskFromDatabase(Schema systemSchema, String scriptName) {
List<Row> rows =
systemSchema.getTable("Scripts").where(f("name", EQUALS, scriptName)).retrieveRows();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import static org.molgenis.emx2.tasks.TaskStatus.RUNNING;

import java.net.URL;
import java.util.*;
import java.util.concurrent.*;
import org.molgenis.emx2.MolgenisException;
Expand Down Expand Up @@ -49,11 +48,6 @@ public String submitTaskFromName(String name, String parameters) {
throw new UnsupportedOperationException("Not supported when using in memory task service");
}

@Override
public String submitTaskFromName(String name, String parameters, URL url) {
throw new UnsupportedOperationException("Not supported when using in memory task service");
}

@Override
public Set<String> getJobIds() {
return tasks.keySet();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void testTaskServiceDatabaseBacked() throws InterruptedException {
// we don't use 'ADMIN' schema
Schema testSchema =
database.dropCreateSchema(TestTaskServiceDatabaseBacked.class.getSimpleName());
TaskServiceInDatabase taskService = new TaskServiceInDatabase(testSchema.getName());
TaskServiceInDatabase taskService = new TaskServiceInDatabase(testSchema.getName(), null);
DummyTask dummyTask = new DummyTask();
String id = taskService.submit(dummyTask);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public static void init() {
@Test
@Disabled
public void testTaskServiceScheduler() throws InterruptedException, SchedulerException {
TaskServiceInDatabase service = new TaskServiceInDatabase(SCHEMA_NAME);
TaskServiceInDatabase service = new TaskServiceInDatabase(SCHEMA_NAME, null);
TaskServiceScheduler scheduler = new TaskServiceScheduler(service);

Row scriptRow = row("name", "test", "script", "print('hello');", "cron", "0/1 * * * * ?");
Expand Down Expand Up @@ -72,7 +72,7 @@ public void testTaskServiceScheduler() throws InterruptedException, SchedulerExc

@Test
public void testCronPersistence() {
TaskServiceInDatabase service = new TaskServiceInDatabase(SCHEMA_NAME);
TaskServiceInDatabase service = new TaskServiceInDatabase(SCHEMA_NAME, null);
TaskServiceScheduler scheduler = new TaskServiceScheduler(service);

// not there from before
Expand All @@ -87,7 +87,7 @@ public void testCronPersistence() {

// destroy and recreate see if task comes back
scheduler.shutdown();
service = new TaskServiceInDatabase(SCHEMA_NAME);
service = new TaskServiceInDatabase(SCHEMA_NAME, null);

// make sure only 'test' is in the scheduled tasks, not other scripts
scheduler = new TaskServiceScheduler(service);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
import io.swagger.util.Yaml;
import io.swagger.v3.oas.models.OpenAPI;
import java.io.IOException;
import java.net.URL;
import java.util.*;
import org.molgenis.emx2.*;
import org.molgenis.emx2.utils.URIUtils;
import org.molgenis.emx2.web.controllers.OIDCController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -31,6 +33,7 @@ public class MolgenisWebservice {
private static final String USER_AGENT_ALLOW = "User-agent: *\nAllow: /";
public static MolgenisSessionManager sessionManager;
public static OIDCController oidcController;
static URL hostUrl;

private MolgenisWebservice() {
// hide constructor
Expand All @@ -51,6 +54,12 @@ public static void start(int port) {
})
.start(port);

try {
hostUrl = new URL(URIUtils.extractHost(app.jettyServer().server().getURI()));
} catch (Exception ignored) {
// should we handle this?
}

MessageApi.create(app);

app.get("/" + OIDC_CALLBACK_PATH, MolgenisWebservice::handleLoginCallback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,15 @@
import static org.molgenis.emx2.Constants.SYSTEM_SCHEMA;
import static org.molgenis.emx2.FilterBean.f;
import static org.molgenis.emx2.SelectColumn.s;
import static org.molgenis.emx2.utils.URIUtils.extractHost;
import static org.molgenis.emx2.web.FileApi.addFileColumnToResponse;
import static org.molgenis.emx2.web.MolgenisWebservice.hostUrl;
import static org.molgenis.emx2.web.MolgenisWebservice.sessionManager;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.javalin.Javalin;
import io.javalin.http.Context;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import org.molgenis.emx2.*;
Expand All @@ -24,10 +22,11 @@
public class TaskApi {

// todo, make jobs private to the user?
public static TaskService taskService = new TaskServiceInDatabase(SYSTEM_SCHEMA);
public static final TaskService taskService = new TaskServiceInDatabase(SYSTEM_SCHEMA, hostUrl);
// to schedule jobs, see MolgenisSessionManager how we keep this in sync with Database using a
// TableListener
public static TaskServiceScheduler taskSchedulerService = new TaskServiceScheduler(taskService);
public static final TaskServiceScheduler taskSchedulerService =
new TaskServiceScheduler(taskService);

public static void create(Javalin app) {
app.get("/api/tasks", TaskApi::listTasks);
Expand Down Expand Up @@ -72,7 +71,7 @@ private static void viewScheduledTasks(Context ctx) throws JsonProcessingExcepti
ctx.json(new ObjectMapper().writeValueAsString(taskSchedulerService.scheduledTaskNames()));
}

private static void postScript(Context ctx) throws MalformedURLException {
private static void postScript(Context ctx) {
MolgenisSession session = sessionManager.getSession(ctx.req());
String user = session.getSessionUser();
if (!"admin".equals(user)) {
Expand All @@ -81,8 +80,7 @@ private static void postScript(Context ctx) throws MalformedURLException {
String name = URLDecoder.decode(ctx.pathParam("name"), StandardCharsets.UTF_8);
String parameters = ctx.body();

URL host = new URL(extractHost(ctx.url()));
String id = taskService.submitTaskFromName(name, parameters, host);
String id = taskService.submitTaskFromName(name, parameters);
ctx.json(new TaskReference(id));
}

Expand Down

0 comments on commit 4e9f3de

Please sign in to comment.