Skip to content

Commit

Permalink
fix: updated library to gson
Browse files Browse the repository at this point in the history
  • Loading branch information
payaljindal committed Jan 23, 2024
1 parent 5b5b4e5 commit 4f0be35
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 288 deletions.
33 changes: 33 additions & 0 deletions tools/target-server-validator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,39 @@ Run the script as below
python3 main.py
```

This script deploys an API proxy to validate if the target servers are reachable or not. To use the API proxy, make sure your payloads adhere to the following format:

```json
[
{
"host": "example.com",
"port": 443
},
{
"host": "example2.com",
"port": 443
},
// Add up to 8 more host-port combinations as needed
]
```

The response will look like this -
```json
[
{
"host": "example.com",
"port": 443,
"status" : "REACHABLE"
},
{
"host": "example2.com",
"port": 443,
"status" : "UNKNOWN_HOST"
},
// and so on
]
```

## Report
Validation Report: `report.md` OR `report.csv` can be found in the same directory as the script.

Expand Down
17 changes: 8 additions & 9 deletions tools/target-server-validator/apigee_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ def __init__(
self.auth_type = auth_type
access_token = self.get_access_token()
self.auth_header = {
"Authorization": "Bearer {}".format(access_token)
"Authorization": f"Bearer {access_token}"
if self.auth_type == "oauth"
else "Basic {}".format(access_token) # noqa
else f"Basic {access_token}" # noqa
}

def is_token_valid(self, token):
Expand Down Expand Up @@ -139,7 +139,7 @@ def create_api(self, api_name, proxy_bundle_path):
if response.status_code == 200:
revision = response.json().get('revision', "1")
return True, revision
logger.debug(f"{response.text}")
logger.debug(response.text)
return False, None

def get_api_revisions_deployment(self, env, api_name, api_rev): # noqa
Expand All @@ -160,7 +160,7 @@ def get_api_revisions_deployment(self, env, api_name, api_rev): # noqa
logger.debug(f"API {api_name} is in Status: {api_deployment_status} !") # noqa
return False
else:
logger.debug(f"{response.text}")
logger.debug(response.text)
return False

def deploy_api(self, env, api_name, api_rev):
Expand Down Expand Up @@ -294,12 +294,9 @@ def fetch_env_target_servers_parallel(self, arg_tuple):

def call_validator_proxy_parallel(self, arg_tuple):
response = run_validator_proxy(arg_tuple[0], arg_tuple[1], arg_tuple[2], arg_tuple[3], arg_tuple[4]) # noqa
if response.get("error"):
logger.error(f"Error while calling the validator proxy - {response['error']}") # noqa
else:
if isinstance(response, list):
report = []
outputs = response.get("hostname_portnumbers_status", [])
for output in outputs:
for output in response:
report.append(
[
output["name"],
Expand All @@ -315,6 +312,8 @@ def call_validator_proxy_parallel(self, arg_tuple):
]
)
return report
else:
logger.error(f"Error while calling the validator proxy - {response.get('error','unknown error')}") # noqa

def write_proxy_bundle(self, export_dir, file_name, data):
file_path = f"./{export_dir}/{file_name}.zip"
Expand Down
14 changes: 7 additions & 7 deletions tools/target-server-validator/base_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@ class CustomFormatter(logging.Formatter):
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
reset = "\x1b[0m"
format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)" # noqa
logging_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)" # noqa

FORMATS = {
logging.DEBUG: grey + format + reset,
logging.INFO: grey + format + reset,
logging.WARNING: yellow + format + reset,
logging.ERROR: red + format + reset,
logging.CRITICAL: bold_red + format + reset
logging.DEBUG: grey + logging_format + reset,
logging.INFO: grey + logging_format + reset,
logging.WARNING: yellow + logging_format + reset,
logging.ERROR: red + logging_format + reset,
logging.CRITICAL: bold_red + logging_format + reset
}

def format(self, record):
Expand All @@ -37,7 +37,7 @@ def format(self, record):


logger = logging.getLogger("TargetServerValidator")
logger.setLevel(getattr(logging, LOGLEVEL)) # Add this line
logger.setLevel(getattr(logging, LOGLEVEL))

if LOG_HANDLER == "File":
ch = logging.FileHandler(LOG_FILE_PATH, mode="a")
Expand Down
17 changes: 4 additions & 13 deletions tools/target-server-validator/callout/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<javaxjson.version>1.1.4</javaxjson.version>
<java.version>1.8</java.version>
<apiproxy.java.rsrc.dir>../apiproxy/resources/java</apiproxy.java.rsrc.dir>
<testng.version>6.8.7</testng.version> <!-- current: 6.9.4 -->
Expand Down Expand Up @@ -72,16 +71,10 @@ do it manually by running these commands:
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>javax.json</groupId>
<artifactId>javax.json-api</artifactId>
<version>1.1.4</version>
</dependency>

</dependencies>

<build>
Expand Down Expand Up @@ -153,11 +146,9 @@ do it manually by running these commands:
<mapper type="flatten"/>
</copy>

<!-- Copy the javax jar files -->
<copy todir="${apiproxy.java.rsrc.dir}">
<fileset dir="${project.build.directory}/lib">
<include name="javax.json-1.1.4.jar"/>
<include name="javax.json-api-1.1.4.jar"/>
<include name="gson-2.10.1.jar"/>
</fileset>
<mapper type="flatten"/>
</copy>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

package com.apigee.devrel.apigee_target_server_validator;

import com.google.apigee.json.JavaxJson;
import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
Expand All @@ -26,13 +25,10 @@
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import com.apigee.flow.execution.Action;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
import javax.json.Json;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonElement;

/**
* A callout that checks if a particular port is open on a specified host.
Expand Down Expand Up @@ -68,23 +64,7 @@ private static String available(final String host, final int port) {
}
}
}
private static String convertMapToJson(Map<String, List<Map<String, String>>> result) {
JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder();

List<Map<String, String>> listMap = result.get("hostname_portnumbers_status");
for (Map<String, String> map : listMap) {
JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder();
for (Map.Entry<String, String> entry : map.entrySet()) {
jsonObjectBuilder.add(entry.getKey(), entry.getValue());
}
jsonArrayBuilder.add(jsonObjectBuilder);
}

return Json.createObjectBuilder()
.add("hostname_portnumbers_status", jsonArrayBuilder)
.build()
.toString();
}
/**
* Executes the callout.
*
Expand All @@ -97,31 +77,23 @@ public ExecutionResult execute(final MessageContext messageContext,
try {
String payload = (String) messageContext.getVariable("request.content");
if (payload != null) {
Map<String, List<Map<String, String>>> result = new HashMap<>();
result.put("hostname_portnumbers_status", new ArrayList<>());
Map<String,List<Map<String,String>>> outerMap = JavaxJson.fromJson(payload,Map.class);
for (Map.Entry<String, List<Map<String, String>>> entry : outerMap.entrySet()) {
String hostname_portnumbers = entry.getKey();
List<Map<String, String>> list_map_host_port = entry.getValue();

for (Map<String, String> host_port : list_map_host_port) {
String hostName = (String) host_port.get("host");
String portNumber = (String) host_port.get("port");
Integer portNumberint = Integer.parseInt(portNumber);
String status = available(hostName, portNumberint);
Map<String, String> newEntry = new HashMap<>();
newEntry.put("status",status);
newEntry.putAll(host_port);

result.get("hostname_portnumbers_status").add(newEntry);
}
Gson gson = new Gson();
JsonArray hostPortArray = gson.fromJson(payload, JsonArray.class);
for (JsonElement jsonElement : hostPortArray) {
JsonObject hostPortEntry = jsonElement.getAsJsonObject();
String host = hostPortEntry.get("host").getAsString();
Integer port = hostPortEntry.get("port").getAsInt();
String status = available(host, port);
hostPortEntry.addProperty("status", status);
}
String jsonResult = convertMapToJson(result);
messageContext.setVariable("flow.result", jsonResult);
String results = gson.toJson(hostPortArray);
messageContext.setVariable("flow.result", results);
return ExecutionResult.SUCCESS;
} else {
messageContext.setVariable("ERROR", "set payload");
return ExecutionResult.ABORT;
ExecutionResult executionResult = new ExecutionResult(false,
Action.ABORT);
executionResult.setErrorResponse("No payload received");
return executionResult;
}
} catch (Exception e) {
ExecutionResult executionResult = new ExecutionResult(false,
Expand All @@ -132,7 +104,7 @@ public ExecutionResult execute(final MessageContext messageContext,
e.getClass().getName());
//--Set flow variables -- may be useful for debugging.
messageContext.setVariable("JAVA_ERROR", e.getMessage());
return executionResult;
return executionResult;
}
}
}
}

0 comments on commit 4f0be35

Please sign in to comment.