Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-fc</artifactId>
<packaging>jar</packaging>
<version>1.8.24</version>
<version>1.8.31</version>
<name>aliyun-java-sdk-fc</name>
<url>https://www.aliyun.com/product/fc</url>
<description>Aliyun Java SDK for FunctionCompute</description>
Expand Down Expand Up @@ -104,6 +104,11 @@
<artifactId>aliyun-java-sdk-fc-open</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.8</version>
</dependency>
</dependencies>
<licenses>
<license>
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/aliyuncs/fc/client/FunctionComputeClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@
import com.aliyuncs.fc.utils.FcUtil;
import com.google.gson.Gson;

import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Logger;

/**
Expand Down Expand Up @@ -658,4 +662,24 @@ public StopStatefulAsyncInvocationResponse stopStatefulAsyncInvocation(StopState
stopStatefulAsyncInvocationResponse.setStatus(response.getStatus());
return stopStatefulAsyncInvocationResponse;
}

public ListInstancesResponse listInstances(ListInstancesRequest request) throws ClientException, ServerException {
HttpResponse response = client.doAction(request, CONTENT_TYPE_APPLICATION_JSON, GET);
return ResponseFactory.genListInstancesResponse(response);
}

public InstanceExecResponse instanceExec(InstanceExecRequest request)
throws ClientException, ServerException, UnsupportedEncodingException, InvalidKeyException,
IllegalStateException, UnsupportedEncodingException, NoSuchAlgorithmException {
StringBuilder sb = new StringBuilder();
sb.append(config.getEndpoint().replace("http", "ws")).append(request.getPath()).append("?")
.append(request.getQueries());
URI uri = URI.create(sb.toString());

FcUtil.signRequest(config, request, "", GET, false);

ExecWebsocket ws = new ExecWebsocket(uri, request.getHeaders());
InstanceExecResponse response = new InstanceExecResponse(ws);
return response;
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/aliyuncs/fc/constants/Const.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ public class Const {
public final static String LIST_FUNCTION_WITH_QUALIFIER_STATEFUL_ASYNC_INVOCATIONS_PATH =
SINGLE_FUNCTION_WITH_QUALIFIER_PATH + "/stateful-async-invocations";

public final static String LIST_INSTANCES_PATH = SINGLE_FUNCTION_PATH+"/instances";
public final static String INSTANCE_EXEC_PATH = SINGLE_FUNCTION_PATH +"/instances/%s/exec";
public final static String LIST_INSTANCES_WITH_QUALIFIER_PATH = SINGLE_FUNCTION_WITH_QUALIFIER_PATH +"/instances";
public final static String INSTANCE_EXEC_WITH_QUALIFIER_PATH = SINGLE_FUNCTION_WITH_QUALIFIER_PATH +"/instances/%s/exec";
/**
* 3 seconds
*
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/aliyuncs/fc/model/ExecCallback.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.aliyuncs.fc.model;

import org.java_websocket.handshake.ServerHandshake;

public interface ExecCallback {
public void onOpen(ServerHandshake handshakedata);

public void onClose(int code, String reason, boolean remote);

public void onError(Exception ex);

public void onStdout(String message);

public void onStderr(String message);
}
101 changes: 101 additions & 0 deletions src/main/java/com/aliyuncs/fc/model/ExecWebsocket.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package com.aliyuncs.fc.model;

import java.net.URI;
import java.util.Map;

import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;

public class ExecWebsocket extends WebSocketClient {
static final byte STDIN = 0;
static final byte STDOUT = 1;
static final byte STDERR = 2;
static final byte SYSERR = 3;

private ExecCallback callback = null;

public ExecWebsocket(URI url, Map<String, String> httpHeaders) {
super(url, httpHeaders);
}

public void setCallback(ExecCallback callback) {
this.callback = callback;
}

@Override
public void onOpen(ServerHandshake handshakedata) {
if (callback != null) {
callback.onOpen(handshakedata);
} else {
System.out.println("onOpen");
}
}

@Override
public void onClose(int code, String reason, boolean remote) {
if (callback != null) {
callback.onClose(code, reason, remote);
} else {
System.out.printf("CLOSE: %d %s\n", code, reason);
}
}

@Override
public void onError(Exception ex) {
if (callback != null) {
callback.onError(ex);
} else {
System.out.printf("ERROR:%s\n", ex.getMessage());
}
}

@Override
public void onMessage(String message) {
switch (message.charAt(0)) {
case STDOUT:
onStdout(message.substring(1));
break;
case STDERR:
onStderr(message.substring(1));
break;
case SYSERR:
Exception e = new Exception(message.substring(1));
onError(e);
break;
default:
throw new RuntimeException("Unknown message type: " + message);
}
}

@Override
public void send(String message) {
super.send( message.getBytes());
}

@Override
public void send(byte[] message) {
byte[] buf = new byte[message.length + 1];
buf[0] = STDIN;
for (int i = 0; i < message.length; i++) {
buf[i+1] = message[i];
}
super.send(buf);
}

public void onStdout(String message) {
if (callback != null) {
callback.onStdout(message);
} else {
System.out.printf("STDOUT:%s\n", message);
}

}

public void onStderr(String message) {
if (callback != null) {
callback.onStderr(message);
} else {
System.out.printf("STDERR:%s\n", message);
}
}
}
41 changes: 41 additions & 0 deletions src/main/java/com/aliyuncs/fc/model/InstanceMetadata.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.aliyuncs.fc.model;

import com.google.gson.annotations.SerializedName;
import java.util.Map;

/**
* TODO: add javadoc
*/
public class InstanceMetadata {

@SerializedName("instanceId")
private String instanceID;

@SerializedName("versionId")
private String versionID;

public InstanceMetadata() {
this.instanceID = "";
}

public InstanceMetadata(String instanceID) {
this.instanceID = instanceID;
}

public String getInstanceID() {
return instanceID;
}

public void setInstanceID(String instanceId) {
this.instanceID = instanceId;
}


public String getVersionID() {
return versionID;
}

public void setVersionID(String versionID) {
this.versionID = versionID;
}
}
Loading