import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.ruby.codeInsight.types.signature.RSignature;
import org.jetbrains.ruby.codeInsight.types.storage.server.RSignatureStorageServer;
import org.jetbrains.ruby.codeInsight.types.storage.server.RSignatureStorageServerImpl;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
public class LambdaFunctionHandler implements RequestHandler<S3Event, Object> {
@Override
public Object handleRequest(@NotNull final S3Event event, @NotNull final Context context) {
final LambdaLogger logger = context.getLogger();
logger.log("Input: " + event);
final String statFileName = event.getRecords().get(0).getS3().getObject().getKey();
try {
final Properties properties = getProperties();
final RSignatureStorageServer server = new RSignatureStorageServerImpl(
properties.getProperty("host"), properties.getProperty("port"),
properties.getProperty("login"), properties.getProperty("password"),
properties.getProperty("dbName"));
final List<RSignature> signatures = server.getSignaturesFromStatFile(statFileName, false);
server.insertSignaturesToStorage(signatures);
server.deleteStatFile(statFileName, false);
} catch (ClassNotFoundException | IOException | SQLException e) {
logger.log(e.toString());
return "FAIL";
}
return "OK";
}
@NotNull
private static Properties getProperties() throws IOException {
final String PROPERTIES_FILE = "aws.properties";
final Properties properties = new Properties();
final URL propertiesURL = LambdaFunctionHandler.class.getClassLoader().getResource(PROPERTIES_FILE);
if (propertiesURL == null) {
throw new FileNotFoundException("File " + PROPERTIES_FILE + " not found");
}
final String propertiesPath = propertiesURL.getPath();
properties.load(new FileInputStream(propertiesPath));
return properties;
}
}