Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ballerina services and listeners API #6

Merged
merged 18 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from 15 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
2 changes: 1 addition & 1 deletion ballerina-tests/artifacts-tests/tests/Config.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
testURL = "https://localhost:9165/"
testURL = "https://localhost:9165"
testPort = 9090

[ballerinax.wso2.controlplane]
Expand Down
29 changes: 26 additions & 3 deletions ballerina-tests/artifacts-tests/tests/test.bal
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,47 @@ public function testGetBallerinaNode() returns error? {
enable: false
}
);
cp:Node|error node = icpClient->get("management");
cp:Node|error node = icpClient->/management();
test:assertTrue(node is cp:Node, "Invalid response received");
}

@test:Config {}
public function testGetBallerinaArtifacts() returns error? {
public function testGetBallerinaServiceArtifacts() returns error? {
http:Client rmClient = check new (testURL,
secureSocket = {
enable: false
}
);
cp:Artifacts|error artifacts = rmClient->get("management/Service");
cp:Artifacts|error artifacts = rmClient->/management/services();
test:assertTrue(artifacts is cp:Artifacts, "Invalid response received");
test:assertTrue(artifacts.count() == 1, "No services found");

cp:ArtifactDetail|error artifact = rmClient->/management/services(name = "service_1");
test:assertTrue(artifact is cp:ServiceDetail, "Invalid response received");
}

@test:Config {}
public function testGetBallerinaListenerArtifacts() returns error? {
http:Client rmClient = check new (testURL,
secureSocket = {
enable: false
}
);
cp:Artifacts|error artifacts = rmClient->/management/listeners();
test:assertTrue(artifacts is cp:Artifacts, "Invalid response received");
test:assertTrue(artifacts.count() == 1, "No services found");

cp:ArtifactDetail|error artifact = rmClient->/management/listeners(name = "listener_1");
test:assertTrue(artifact is cp:ListenerDetail, "Invalid response received");
}

service /hello on new http:Listener(testPort) {

resource function get greeting() returns string {
return "Hello, World!";
}

resource function get albums/[string title]/[string user]/[string ...]() returns string|http:NotFound {
return "Hello, World!";
}
}
4 changes: 2 additions & 2 deletions ballerina/Ballerina.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
org = "ballerinax"
name = "wso2.controlplane"
version = "1.0.0"
version = "0.0.0"
HindujaB marked this conversation as resolved.
Show resolved Hide resolved
distribution = "2201.9.0"
repository = "https://github.com/ballerina-platform/module-ballerinax-wso2.controlplane"
license = ["Apache-2.0"]
Expand All @@ -10,4 +10,4 @@ license = ["Apache-2.0"]
graalvmCompatible = true

[[platform.java17.dependency]]
path = "../native/build/libs/wso2.controlplane-native-1.0.0-SNAPSHOT.jar"
path = "../native/build/libs/wso2.controlplane-native-0.0.0-SNAPSHOT.jar"
HindujaB marked this conversation as resolved.
Show resolved Hide resolved
37 changes: 26 additions & 11 deletions ballerina/Dependencies.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@

[ballerina]
dependencies-toml-version = "2"
distribution-version = "2201.9.0-20240408-101100-fa2ff301"
distribution-version = "2201.9.0-20240425-195200-d5ce8c72"

[[package]]
org = "ballerina"
name = "auth"
version = "2.10.0"
version = "2.11.0"
dependencies = [
{org = "ballerina", name = "crypto"},
{org = "ballerina", name = "jballerina.java"},
Expand All @@ -22,7 +22,7 @@ dependencies = [
[[package]]
org = "ballerina"
name = "cache"
version = "3.7.1"
version = "3.8.0"
dependencies = [
{org = "ballerina", name = "constraint"},
{org = "ballerina", name = "jballerina.java"},
Expand All @@ -33,15 +33,15 @@ dependencies = [
[[package]]
org = "ballerina"
name = "constraint"
version = "1.4.0"
version = "1.5.0"
dependencies = [
{org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerina"
name = "crypto"
version = "2.5.0"
version = "2.7.0"
dependencies = [
{org = "ballerina", name = "jballerina.java"},
{org = "ballerina", name = "time"}
Expand All @@ -64,7 +64,7 @@ modules = [
[[package]]
org = "ballerina"
name = "http"
version = "2.10.12"
version = "2.11.0"
dependencies = [
{org = "ballerina", name = "auth"},
{org = "ballerina", name = "cache"},
Expand Down Expand Up @@ -113,7 +113,7 @@ modules = [
[[package]]
org = "ballerina"
name = "jwt"
version = "2.10.0"
version = "2.11.0"
dependencies = [
{org = "ballerina", name = "cache"},
{org = "ballerina", name = "crypto"},
Expand Down Expand Up @@ -231,7 +231,7 @@ dependencies = [
[[package]]
org = "ballerina"
name = "oauth2"
version = "2.10.0"
version = "2.11.0"
dependencies = [
{org = "ballerina", name = "cache"},
{org = "ballerina", name = "crypto"},
Expand All @@ -244,7 +244,7 @@ dependencies = [
[[package]]
org = "ballerina"
name = "observe"
version = "1.2.2"
version = "1.2.3"
dependencies = [
{org = "ballerina", name = "jballerina.java"}
]
Expand Down Expand Up @@ -286,18 +286,33 @@ dependencies = [
{org = "ballerina", name = "jballerina.java"}
]

[[package]]
org = "ballerina"
name = "uuid"
version = "1.8.0"
dependencies = [
{org = "ballerina", name = "crypto"},
{org = "ballerina", name = "jballerina.java"},
{org = "ballerina", name = "lang.int"},
{org = "ballerina", name = "time"}
]
modules = [
{org = "ballerina", packageName = "uuid", moduleName = "uuid"}
]

[[package]]
org = "ballerinax"
name = "wso2.controlplane"
version = "1.0.0"
version = "0.0.0"
HindujaB marked this conversation as resolved.
Show resolved Hide resolved
dependencies = [
{org = "ballerina", name = "file"},
{org = "ballerina", name = "http"},
{org = "ballerina", name = "jballerina.java"},
{org = "ballerina", name = "jwt"},
{org = "ballerina", name = "lang.runtime"},
{org = "ballerina", name = "log"},
{org = "ballerina", name = "os"}
{org = "ballerina", name = "os"},
{org = "ballerina", name = "uuid"}
]
modules = [
{org = "ballerinax", packageName = "wso2.controlplane", moduleName = "wso2.controlplane"}
Expand Down
27 changes: 17 additions & 10 deletions ballerina/icpService.bal
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,29 @@ service /management on securedEP {
return check getBallerinaNode();
}

resource function get [string resourceType](string? searchKey)
returns Artifacts|error {
Artifact[] artifacts = check getArtifacts(resourceType, searchKey, Artifact);
return {
count : artifacts.length(),
list : artifacts
};
resource function get [ArtifactType resourceType](string? name)
returns Artifacts|ArtifactDetail|error {
if (name == ()) {
Artifact[] artifacts = check getArtifacts(resourceType, Artifact);
return {
count: artifacts.length(),
list: artifacts
};
}
return getDetailedArtifact(resourceType, name);
}

}

isolated function getBallerinaNode() returns Node|error = @java:Method {
'class: "io.ballerina.lib.wso2.controlplane.Utils"
} external;

isolated function getArtifacts(string resourceType, string? searchKey, typedesc<anydata> t) returns Artifact[]|error =
isolated function getDetailedArtifact(string resourceType, string name) returns ArtifactDetail|error =
@java:Method {
'class: "io.ballerina.lib.wso2.controlplane.Utils"
'class: "io.ballerina.lib.wso2.controlplane.ArtifactUtils"
} external;

isolated function getArtifacts(string resourceType, typedesc<anydata> t) returns Artifact[]|error =
@java:Method {
'class: "io.ballerina.lib.wso2.controlplane.ArtifactUtils"
} external;
2 changes: 2 additions & 0 deletions ballerina/init.bal
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ function registerInDashboardServer() returns error? {
enable: false
}
);

IntegrationPlaneConnectionRequest connectionRequest = {
groupId: dashboard.groupId,
nodeId: dashboard.nodeId,
interval: dashboard.heartbeatInterval,
mgtApiUrl: dashboard.mgtApiUrl
};

boolean isFailed = true;
while (true) {
http:Response|http:ClientError resp = dsClient->post("/heartbeat", connectionRequest);
Expand Down
48 changes: 32 additions & 16 deletions ballerina/types.bal
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
import ballerina/uuid;

type IntegrationPlaneConnectionRequest record {
string product = "bal";
Expand All @@ -38,41 +39,56 @@ type AccessTokenResponse record {|
|};

type DashBoard record {
string url = "";
string url;
int heartbeatInterval = 10;
decimal waitTimeForServicesInSeconds = 5;
string groupId = "";
string nodeId = "";
string mgtApiUrl = "";
string groupId;
string nodeId = uuid:createType4AsString();
string mgtApiUrl;
};

public type Artifacts record {
int count;
Artifact[] list;
};

public type Artifact Service;
public enum ArtifactType {
SERVICE = "services",
LISTENER = "listeners"
}

public type Service record {
public type Artifact record {
string name;
string? attachPoint;
Metadata metadata;
map<anydata> annotations;
};

public type Metadata record {
Listener[] listeners;
map<anydata> metadata;
public type ArtifactDetail ServiceDetail|ListenerDetail;

public type ServiceDetail record {
*Artifact;
string? basePath;
string package;
Artifact[] listeners;
Resource[] resources;
};

public type Resource record {
string[] methods;
string url;
};

public type RequestLimit record {
int maxUriLength;
int maxHeaderSize;
int maxEntityBodySize;
};

public type Listener record {
string 'type;
public type ListenerDetail record {
*Artifact;
string? protocol;
map<anydata> properties;
string package;
};

public type Node record {
string id;
string platformName = "ballerina";
string? platformVersion;
string? ballerinaHome;
Expand Down
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ subprojects {
ballerinaStdLibs "io.ballerina.stdlib:cache-ballerina:${stdlibCacheVersion}"
ballerinaStdLibs "io.ballerina.stdlib:observe-ballerina:${observeVersion}"
ballerinaStdLibs "io.ballerina:observe-ballerina:${observeInternalVersion}"
ballerinaStdLibs "io.ballerina.stdlib:uuid-ballerina:${stdlibUuidVersion}"
}
}

Expand Down
31 changes: 16 additions & 15 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
org.gradle.caching=true
group=org.ballerinalang
version=1.0.0-SNAPSHOT
version=0.0.0-SNAPSHOT
HindujaB marked this conversation as resolved.
Show resolved Hide resolved

puppycrawlCheckstyleVersion=10.12.0
jacocoVersion=0.8.10
testngVersion=7.6.1
ballerinaLangVersion=2201.9.0-20240408-101100-fa2ff301
ballerinaLangVersion=2201.9.0-20240425-195200-d5ce8c72
ballerinaTomlParserVersion=1.2.2

stdlibIoVersion=1.6.0
stdlibHttpVersion=2.10.0-20230911-204400-1c092fe
stdlibLogVersion=2.9.0-20230911-150900-2f32c1a
stdlibFileVersion=1.9.0-20230911-153400-738b25e
stdlibCryptoVersion=2.5.0-20230911-142900-8807d07
stdlibAuthVersion=2.10.0-20230911-153500-8c3c5cb
stdlibMimeVersion=2.9.0-20230911-153200-3add04c
stdlibJwtVersion=2.10.0-20230911-153400-b5de47b
stdlibOAuth2Version=2.10.0-20230911-153600-6710ec0
stdlibConstraintVersion=1.4.0
stdlibHttpVersion=2.11.0-20240426-002300-b3aa664
stdlibLogVersion=2.9.0
stdlibFileVersion=1.9.0
stdlibCryptoVersion=2.7.0-20240425-223800-f7ac719
stdlibAuthVersion=2.11.0-20240425-233400-61e1e89
stdlibMimeVersion=2.9.0
stdlibJwtVersion=2.11.0-20240425-233500-e9ed894
stdlibOAuth2Version=2.11.0-20240425-233800-d8e20a5
stdlibConstraintVersion=1.5.0
stdlibOsVersion=1.8.0
stdlibTaskVersion=2.5.0
stdlibTimeVersion=2.4.0
stdlibCacheVersion=3.7.0
stdlibUrlVersion=2.4.0-20230911-140700-36451a2
observeVersion=1.2.0-20230911-133500-b3d8db3
observeInternalVersion=1.2.0-20230911-141700-4c0454a
stdlibCacheVersion=3.8.0-20240409-101100-e2d7f4e
stdlibUrlVersion=2.4.0
observeVersion=1.2.3-20240408-194900-a0e331f
observeInternalVersion=1.2.2-20240408-195500-1436319
stdlibUuidVersion=1.8.0-20240425-232900-d1eb5d2

ballerinaGradlePluginVersion=2.2.4
Loading
Loading