diff --git a/app/pom.xml b/app/pom.xml index 7b94f7f92..805aed5e4 100644 --- a/app/pom.xml +++ b/app/pom.xml @@ -1251,6 +1251,12 @@ 1.0-SNAPSHOT provided + + + com.google.code.gson + gson + 2.9.0 + diff --git a/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java b/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java new file mode 100644 index 000000000..b994ffe75 --- /dev/null +++ b/app/src/main/java/com/topcoder/direct/services/kafka/CreateChallengeMessage.java @@ -0,0 +1,6 @@ +package com.topcoder.direct.services.kafka; + +public class CreateChallengeMessage { + public String legacyId; + public String topic; +} \ No newline at end of file diff --git a/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java b/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java new file mode 100644 index 000000000..dc49b99f0 --- /dev/null +++ b/app/src/main/java/com/topcoder/direct/services/kafka/DirectKafkaProducer.java @@ -0,0 +1,77 @@ +package com.topcoder.direct.services.kafka; + +import java.util.Hashtable; +import com.google.gson.*; +import java.net.*; +import java.io.*; + +public class DirectKafkaProducer { + + private static DirectKafkaProducer myProducer = null; + public static synchronized DirectKafkaProducer getInstance() { + if (myProducer == null) { myProducer = new DirectKafkaProducer(); } + return myProducer; + } + + public final static int CHALLENGE_CREATE = 0; + + private Hashtable topics = null; + + protected DirectKafkaProducer() { + topics = new Hashtable(); + topics.put(CHALLENGE_CREATE, "challenge.notification.create"); + } + + public void postChallengeCreate(long challengeId) + throws IOException/*, MalformedUrlException*/ { + CreateChallengeMessage ccm = new CreateChallengeMessage(); + ccm.legacyId = ""+challengeId; + ccm.topic = topics.get(CHALLENGE_CREATE); + Gson gson = new Gson(); + String requestBody = gson.toJson(ccm); + postEvent(requestBody); + } + + private String getUrl() { + // get bus api Url from config + return System.getenv("bus.api.url"); + } + + private void doPost(String url, String json) + throws IOException { + // make HTTPS POST call to api + OutputStream os = null; + InputStream is = null; + HttpURLConnection con = null; + try { + URL _url = new URL(url); + con = (HttpURLConnection) _url.openConnection(); + con.setRequestMethod("POST"); + con.setRequestProperty("Content-Type", "application/json"); + con.setRequestProperty("Accept", "application/json"); + os = con.getOutputStream(); + byte[] input = json.getBytes("utf-8"); + os.write(input, 0, input.length); + os.flush(); + // read just to be sure it sent + is = con.getInputStream(); + } finally { + if (os != null) { try { os.close(); } catch (Throwable t) {} } + if (is != null) { try { is.close(); } catch (Throwable t) {} } + } + } + + private void postEvent(final String json) + throws IOException { + new Thread(new Runnable() { + public void run() { + final String url = getUrl(); + try { + doPost(url, json); + } catch (IOException ioe) { + throw new RuntimeException(ioe); + } + } + }).start(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java b/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java index a0f7a66f4..69260aea6 100644 --- a/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java +++ b/app/src/main/java/com/topcoder/direct/services/view/action/contest/launch/SaveDraftContestAction.java @@ -3,6 +3,7 @@ */ package com.topcoder.direct.services.view.action.contest.launch; +import com.topcoder.direct.services.kafka.DirectKafkaProducer; import com.topcoder.catalog.entity.Category; import com.topcoder.catalog.entity.CompDocumentation; import com.topcoder.catalog.entity.CompUploadedFile; @@ -882,6 +883,12 @@ protected void executeAction() throws Exception { // to make the action robust. addFieldError("competitionType", "The competition type is unknown"); } + try { + DirectKafkaProducer.getInstance().postChallengeCreate(softwareCompetition.getId()); + } catch (Exception e) { + e.printStackTrace(); + // log failure to submit to API + } } } diff --git a/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java b/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java index 31b3df7c3..bad043c02 100644 --- a/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java +++ b/services/contest_service_facade/src/main/java/com/topcoder/service/facade/contest/CodeNameUtil.java @@ -11,7 +11,7 @@ import javax.crypto.spec.SecretKeySpec; import javax.naming.InitialContext; import javax.naming.NamingException; -import javax.rmi.PortableRemoteObject; +//import javax.rmi.PortableRemoteObject; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; diff --git a/token.properties.docker b/token.properties.docker index 1bf309964..89e1e456e 100644 --- a/token.properties.docker +++ b/token.properties.docker @@ -349,4 +349,9 @@ defaultGroupIdForTrial = # The Topcoder Connect Url to which the projects creation will redirect TopcoderConnectUrl=https://connect.topcoder-dev.com -TopcoderNewAuthUrl=https://accounts-auth0.topcoder-dev.com \ No newline at end of file +TopcoderNewAuthUrl=https://accounts-auth0.topcoder-dev.com + +##################################### +# Bus API # +##################################### +bus.api.url=https://api.topcoder-dev.com/v5/bus/events \ No newline at end of file