use of com.hortonworks.streamline.streams.catalog.TopologyBranchRule in project streamline by hortonworks.
the class BranchRuleCatalogResource method getTopologyBranchRuleById.
/**
* <p>
* Gets a specific branch rule by Id. For example,
* </p>
* <b>GET /api/v1/catalog/topologies/:TOPOLOGY_ID/branchrules/:RULE_ID</b>
* <pre>
* {
* "responseCode": 1000,
* "responseMessage": "Success",
* "entity": {
* "id": 1,
* "topologyId": 1,
* "name": "rule1",
* "description": "rule test",
* "actions": ...
* }
* }
* </pre>
*/
@GET
@Path("/topologies/{topologyId}/branchrules/{id}")
@Timed
public Response getTopologyBranchRuleById(@PathParam("topologyId") Long topologyId, @PathParam("id") Long ruleId, @Context SecurityContext securityContext) throws Exception {
SecurityUtil.checkRoleOrPermissions(authorizer, securityContext, Roles.ROLE_TOPOLOGY_USER, Topology.NAMESPACE, topologyId, READ);
TopologyBranchRule brRuleInfo = catalogService.getBranchRule(topologyId, ruleId);
if (brRuleInfo != null && brRuleInfo.getTopologyId().equals(topologyId)) {
return WSUtils.respondEntity(brRuleInfo, OK);
}
throw EntityNotFoundException.byId(buildMessageForCompositeId(topologyId, ruleId));
}
use of com.hortonworks.streamline.streams.catalog.TopologyBranchRule in project streamline by hortonworks.
the class BranchRuleCatalogResource method removeRule.
/**
* <p>
* Removes a branch rule.
* </p>
* <b>DELETE /api/v1/catalog/topologies/:TOPOLOGY_ID/branchrules/:RULE_ID</b>
* <pre>
* {
* "responseCode": 1000,
* "responseMessage": "Success",
* "entity": {
* "id": 1,
* "topologyId": 1,
* "name": "rule1",
* "description": "rule test",
* "condition": "humidity > 90 AND celciusToFarenheit(temperature) > 80",
* "actions": ...
* }
* }
* </pre>
*/
@DELETE
@Path("/topologies/{topologyId}/branchrules/{id}")
@Timed
public Response removeRule(@PathParam("topologyId") Long topologyId, @PathParam("id") Long ruleId, @Context SecurityContext securityContext) throws Exception {
SecurityUtil.checkRoleOrPermissions(authorizer, securityContext, Roles.ROLE_TOPOLOGY_SUPER_ADMIN, Topology.NAMESPACE, topologyId, WRITE);
TopologyBranchRule ruleInfo = catalogService.removeBranchRule(topologyId, ruleId);
if (ruleInfo != null) {
return WSUtils.respondEntity(ruleInfo, OK);
}
throw EntityNotFoundException.byId(buildMessageForCompositeId(topologyId, ruleId));
}
use of com.hortonworks.streamline.streams.catalog.TopologyBranchRule in project streamline by hortonworks.
the class BranchRuleCatalogResource method addTopologyRule.
/**
* <p>
* Creates a topology branch rule. For example,
* </p>
* <b>POST /api/v1/catalog/topologies/:TOPOLOGY_ID/branchrules</b>
* <pre>
* {
* "name": "rule1",
* "description": "rule test",
* "condition": "humidity > 90 AND celciusToFarenheit(temperature) > 80",
* "actions": ...
* }
* </pre>
* <i>Sample success response: </i>
* <pre>
* {
* "responseCode": 1000,
* "responseMessage": "Success",
* "entity": {
* "id": 1,
* "topologyId": 1,
* "name": "rule1",
* "description": "rule test",
* "condition": "humidity > 90 AND celciusToFarenheit(temperature) > 80",
* "actions": ...
* }
* }
* </pre>
*
* <i>
* Note:
* </i>
* <ol>
* <li>'celciusToFarenheit' is a user defined function defined via UDFCatalogResource (/api/v1/catalog/udfs) api.</li>
* <li>'temperature' and 'humidity' are the fields of the 'nest' output stream which should have been defined via
* the TopologyStreamCatalogResource (/api/v1/catalog/topologies/{topologyId}/streams) api.</li>
*/
@POST
@Path("/topologies/{topologyId}/branchrules")
@Timed
public Response addTopologyRule(@PathParam("topologyId") Long topologyId, TopologyBranchRule brRuleInfo, @Context SecurityContext securityContext) throws Exception {
SecurityUtil.checkRoleOrPermissions(authorizer, securityContext, Roles.ROLE_TOPOLOGY_SUPER_ADMIN, Topology.NAMESPACE, topologyId, WRITE);
TopologyBranchRule createdTopologyBranchRule = catalogService.addBranchRule(topologyId, brRuleInfo);
return WSUtils.respondEntity(createdTopologyBranchRule, CREATED);
}
use of com.hortonworks.streamline.streams.catalog.TopologyBranchRule in project streamline by hortonworks.
the class StreamCatalogService method copyTopologyDependencies.
private void copyTopologyDependencies(Long topologyId, Long oldVersionId, Long newVersionId) throws Exception {
List<QueryParam> topologyIdVersionIdQueryParams = WSUtils.buildTopologyIdAndVersionIdAwareQueryParams(topologyId, oldVersionId, null);
// topology editor metadata
TopologyEditorMetadata metadata = getTopologyEditorMetadata(topologyId, oldVersionId);
if (metadata != null) {
addTopologyEditorMetadata(topologyId, newVersionId, new TopologyEditorMetadata(metadata));
}
// sources, output streams
Collection<TopologySource> sources = listTopologySources(topologyIdVersionIdQueryParams);
for (TopologySource source : sources) {
addTopologySource(topologyId, newVersionId, new TopologySource(source));
}
// processors, output streams
Collection<TopologyProcessor> processors = listTopologyProcessors(topologyIdVersionIdQueryParams);
for (TopologyProcessor processor : processors) {
addTopologyProcessor(topologyId, newVersionId, new TopologyProcessor(processor));
}
// add sinks
Collection<TopologySink> sinks = listTopologySinks(topologyIdVersionIdQueryParams);
for (TopologySink sink : sinks) {
addTopologySink(topologyId, newVersionId, new TopologySink(sink));
}
// branch rules
Collection<TopologyBranchRule> topologyBranchRules = listBranchRules(topologyIdVersionIdQueryParams);
for (TopologyBranchRule topologyBranchRule : topologyBranchRules) {
addBranchRule(topologyId, newVersionId, new TopologyBranchRule(topologyBranchRule));
}
// windowed rules
Collection<TopologyWindow> topologyWindows = listWindows(topologyIdVersionIdQueryParams);
for (TopologyWindow topologyWindow : topologyWindows) {
addWindow(topologyId, newVersionId, new TopologyWindow(topologyWindow));
}
// rules
Collection<TopologyRule> topologyRules = listRules(topologyIdVersionIdQueryParams);
for (TopologyRule topologyRule : topologyRules) {
addRule(topologyId, newVersionId, new TopologyRule(topologyRule));
}
// add edges
Collection<TopologyEdge> edges = listTopologyEdges(topologyIdVersionIdQueryParams);
for (TopologyEdge edge : edges) {
addTopologyEdge(topologyId, newVersionId, new TopologyEdge(edge));
}
// add topology test run case
Collection<TopologyTestRunCase> runCases = listTopologyTestRunCase(topologyIdVersionIdQueryParams);
for (TopologyTestRunCase runCase : runCases) {
Collection<TopologyTestRunCaseSource> runCaseSources = listTopologyTestRunCaseSource(runCase.getId());
Collection<TopologyTestRunCaseSink> runCaseSinks = listTopologyTestRunCaseSink(runCase.getId());
TopologyTestRunCase newCase = addTopologyTestRunCase(topologyId, newVersionId, new TopologyTestRunCase(runCase));
// add topology test run case source
for (TopologyTestRunCaseSource runCaseSource : runCaseSources) {
addTopologyTestRunCaseSource(newCase.getId(), newVersionId, new TopologyTestRunCaseSource(runCaseSource));
}
// add topology test run case sink
for (TopologyTestRunCaseSink runCaseSink : runCaseSinks) {
addTopologyTestRunCaseSink(newCase.getId(), newVersionId, new TopologyTestRunCaseSink(runCaseSink));
}
}
}
use of com.hortonworks.streamline.streams.catalog.TopologyBranchRule in project streamline by hortonworks.
the class StreamCatalogService method parseAndSerialize.
private String parseAndSerialize(TopologyBranchRule ruleInfo) throws JsonProcessingException {
Rule rule = new Rule();
rule.setId(ruleInfo.getId());
rule.setName(ruleInfo.getName());
rule.setDescription(ruleInfo.getDescription());
rule.setActions(ruleInfo.getActions());
String sql = getSqlString(Collections.singletonList(ruleInfo.getStream()), null, ruleInfo.getCondition(), null);
updateRuleWithSql(rule, sql, ruleInfo.getTopologyId(), ruleInfo.getVersionId());
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(rule);
}
Aggregations