From a8a3a80469b03d3fa4622771fb159da1197b430a Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 11:19:54 +0530 Subject: [PATCH 1/6] Add files via upload --- doc/cep/multi-tenant.md | 75 ++++++++++++++++++++++++++++++++++++++++ doc/cep/multi_01.png | Bin 0 -> 15303 bytes doc/cep/multi_02.png | Bin 0 -> 27702 bytes doc/cep/multi_03.png | Bin 0 -> 33875 bytes 4 files changed, 75 insertions(+) create mode 100644 doc/cep/multi-tenant.md create mode 100644 doc/cep/multi_01.png create mode 100644 doc/cep/multi_02.png create mode 100644 doc/cep/multi_03.png diff --git a/doc/cep/multi-tenant.md b/doc/cep/multi-tenant.md new file mode 100644 index 00000000..caf60eb4 --- /dev/null +++ b/doc/cep/multi-tenant.md @@ -0,0 +1,75 @@ +# Multi-tenancy + +A tenant is a group of users who share a common access with specific privileges to the software instance. The multi-tenant is an architecture that allow a single instance of a software runs on a server and serves multiple tenants. Multi-tenant ensures that the entities/attributes/subscriptions of one tenant are "invisible" to other tenants. + +Tenant is a ```service``` in FIWARE terminology.A tenant can be composed by multiple child ```subtenants```(subservices/servicePath). + +The way to address tenants are HTTP headers + +``` +Fiware-Service : +Fiware-Servicepath: +``` + +Note: Subtenant must start with the / character. + +Cepheus-CEP is designed to provide every tenant a dedicated share of the instance including its data, configuration, user management, tenant individual functionality and non-functional properties. + +For Cepheus-CEP to work in multi-tenant way a user need to enable multi-tenanancy by uncommenting ```spring.profiles.active=multi-tenant``` in application.properties(for build from source)/cep.properties(for Debian package), this feature is disabled by default. + +By enabling this, user can send different configuration for different tenant. Name of file will be obtained by ```cep--``` provided in request Header. + + +![multi-tenancy configuration](multi_01.png) + +The way multi-tenancy is defined in Cepheus-CEP is to have a one-to-one mapping between Orion and Cepheus-CEP tenants e.g., if tenant ```testservice``` exists on Orion(at servicename field in providers), then it should exist on Cepheus-CEP(at request header as Fiware-Service). + +Sample Config file for Cepheus CEP: + +``` +POST http://localhost:8080/v1/admin/config +Fiware-Service: testservice +Fiware-ServicePath: /testservicepath + +{ + "host":"http://localhost:8080", + "in":[ + ... + "providers":[ + { + "url":"http://localhost:1026", + "serviceName": "testservice", + "servicePath": "/testservicepath" + } + ], + ... + ] + "out":[ + ... + "brokers":[ + { + "url":"http://localhost:1026", + "serviceName": "test", + "servicePath": "/" + } + ] + ] +} +``` + +Note: ```serviceName/servicePath``` of orion and ```Fiware-Service/Fiware-ServicePath``` of Cepheus-CEP should be same for processing of events. serviceName/servicePath of the orion and Fiware-Service/Fiware-ServicePath of Cepheus-CEP are mapped at the time of subscription. + +On sending this configuration, Cepheus-CEP saves the configuration as a configuration file locally named as ```cep-testservice-testservicepath```. Then it subscribe to orion for the given serviceName and servicePath(given in provider section). + + +![subscribe to context broker](multi_02.png) + +Whenever Cepheus-CEP receive notifyContext from orion(as In-Event) for any change in value of attributes, it processes Out-Event based on the statement provided in the statements section and generates outgoing Event as an output of the processing. + + +![notification from context broker](multi_03.png) + +### Current Limitation +* The incompatibility between multi-tenancy of Cepheus and serviceName/servicePath defined in providers, i.e., this will not work if we use different tenant in Cepheus CEP and orion. +* The outstanding bugs when using multi tenancy with Orion, mainly #73 and #64. +* Not yet "production ready". diff --git a/doc/cep/multi_01.png b/doc/cep/multi_01.png new file mode 100644 index 0000000000000000000000000000000000000000..3c510a552223b913c1a6c683d2da02027b67d8ac GIT binary patch literal 15303 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 literal 0 HcmV?d00001 diff --git a/doc/cep/multi_02.png b/doc/cep/multi_02.png new file mode 100644 index 0000000000000000000000000000000000000000..3e41d141ee586ba3a2ebcd92927a9508465f57e3 GIT binary patch literal 27702 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 b;LgtIAmc^7Pt`p~z#lPTsk>=H8ZZ6}iv{Kh literal 0 HcmV?d00001 From dc6044c7bc04d053e6a7065744b09f47032350f4 Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 11:24:22 +0530 Subject: [PATCH 2/6] Update multi-tenant.md --- doc/cep/multi-tenant.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/cep/multi-tenant.md b/doc/cep/multi-tenant.md index caf60eb4..e23a40d4 100644 --- a/doc/cep/multi-tenant.md +++ b/doc/cep/multi-tenant.md @@ -11,18 +11,18 @@ Fiware-Service : Fiware-Servicepath: ``` -Note: Subtenant must start with the / character. +Note: ```Subtenant``` must start with the ```/``` character. Cepheus-CEP is designed to provide every tenant a dedicated share of the instance including its data, configuration, user management, tenant individual functionality and non-functional properties. -For Cepheus-CEP to work in multi-tenant way a user need to enable multi-tenanancy by uncommenting ```spring.profiles.active=multi-tenant``` in application.properties(for build from source)/cep.properties(for Debian package), this feature is disabled by default. +For Cepheus-CEP to work in ```multi-tenant``` way a user need to enable multi-tenanancy by uncommenting ```spring.profiles.active=multi-tenant``` in application.properties(for build from source)/cep.properties(for Debian package), this feature is disabled by default. By enabling this, user can send different configuration for different tenant. Name of file will be obtained by ```cep--``` provided in request Header. ![multi-tenancy configuration](multi_01.png) -The way multi-tenancy is defined in Cepheus-CEP is to have a one-to-one mapping between Orion and Cepheus-CEP tenants e.g., if tenant ```testservice``` exists on Orion(at servicename field in providers), then it should exist on Cepheus-CEP(at request header as Fiware-Service). +The way multi-tenancy is defined in Cepheus-CEP is to have a ```one-to-one``` mapping between Orion and Cepheus-CEP tenants e.g., if tenant ```testservice``` exists on Orion(at servicename field in providers), then it should exist on Cepheus-CEP(at request header as Fiware-Service). Sample Config file for Cepheus CEP: From b84630ce18babb4c4aa526e76015f6d7196b4978 Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 11:27:08 +0530 Subject: [PATCH 3/6] Update multi-tenant.md --- doc/cep/multi-tenant.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/cep/multi-tenant.md b/doc/cep/multi-tenant.md index e23a40d4..2214235e 100644 --- a/doc/cep/multi-tenant.md +++ b/doc/cep/multi-tenant.md @@ -11,7 +11,7 @@ Fiware-Service : Fiware-Servicepath: ``` -Note: ```Subtenant``` must start with the ```/``` character. +**Note**: ```Subtenant``` must start with the ```/``` character. Cepheus-CEP is designed to provide every tenant a dedicated share of the instance including its data, configuration, user management, tenant individual functionality and non-functional properties. @@ -57,7 +57,7 @@ Fiware-ServicePath: /testservicepath } ``` -Note: ```serviceName/servicePath``` of orion and ```Fiware-Service/Fiware-ServicePath``` of Cepheus-CEP should be same for processing of events. serviceName/servicePath of the orion and Fiware-Service/Fiware-ServicePath of Cepheus-CEP are mapped at the time of subscription. +**Note**: ```serviceName/servicePath``` of orion and ```Fiware-Service/Fiware-ServicePath``` of Cepheus-CEP should be same for processing of events. serviceName/servicePath of the orion and Fiware-Service/Fiware-ServicePath of Cepheus-CEP are mapped at the time of subscription. On sending this configuration, Cepheus-CEP saves the configuration as a configuration file locally named as ```cep-testservice-testservicepath```. Then it subscribe to orion for the given serviceName and servicePath(given in provider section). From 92aec955e983c0d8e650c378cd582f9e38cb9f28 Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 11:51:42 +0530 Subject: [PATCH 4/6] Update cep.md --- doc/admin/cep.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/admin/cep.md b/doc/admin/cep.md index e7c42e83..fdaddfc6 100644 --- a/doc/admin/cep.md +++ b/doc/admin/cep.md @@ -126,6 +126,21 @@ The Cepheus-CEP loads its data on startup and saves back data updates to a singl The default location of the data file is defined by the `data.file` property. This Cepheus-CEP process must have write access rights on this file. +### Multi-Tenancy + +Cepheus-CEP comes with the ```multi-tenancy``` feature by which user can send multiple config file based on different ```tenants```. Cepheus-CEP provide every tenant a dedicated share of the instance including its data, configuration, user management, tenant individual functionality and non-functional properties. + +You can enable ```multi-tenancy``` feature of Cepheus CEP by uncommenting ```spring.profiles.active=multi-tenant``` in: +* the src/main/resources/application.properties file when building from the source or +* an external configuration like /etc/cepheus/cep.properties from the Debian package. + +``` +# Optional multi-tenancy profile +spring.profiles.active=multi-tenant +``` + +**Note**: This feature is ```disabled``` by default and is **not** yet **"production ready"**. + ### Metrics and health You can enable the Spring Boot Actuator `/infos`, `/health` and `/metrics` endpoints with these application properties: From 88ea9ac2156b7c9c1f98ab1ad673e2bbeca7f204 Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 14:44:50 +0530 Subject: [PATCH 5/6] Update multi-tenant.md --- doc/cep/multi-tenant.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cep/multi-tenant.md b/doc/cep/multi-tenant.md index 2214235e..f578b61d 100644 --- a/doc/cep/multi-tenant.md +++ b/doc/cep/multi-tenant.md @@ -71,5 +71,5 @@ Whenever Cepheus-CEP receive notifyContext from orion(as In-Event) for any chang ### Current Limitation * The incompatibility between multi-tenancy of Cepheus and serviceName/servicePath defined in providers, i.e., this will not work if we use different tenant in Cepheus CEP and orion. -* The outstanding bugs when using multi tenancy with Orion, mainly #73 and #64. +* The outstanding bugs when using multi tenancy with Orion, mainly https://github.com/Orange-OpenSource/fiware-cepheus/issues/73 and https://github.com/Orange-OpenSource/fiware-cepheus/issues/64. * Not yet "production ready". From a74ea2b10cdb968e562ac9b59edcc3f4850cb5d2 Mon Sep 17 00:00:00 2001 From: Pooja Pathak <33315652+pooja1pathak@users.noreply.github.com> Date: Fri, 16 Nov 2018 14:50:55 +0530 Subject: [PATCH 6/6] Update multi-tenant.md --- doc/cep/multi-tenant.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cep/multi-tenant.md b/doc/cep/multi-tenant.md index f578b61d..68b0cceb 100644 --- a/doc/cep/multi-tenant.md +++ b/doc/cep/multi-tenant.md @@ -71,5 +71,5 @@ Whenever Cepheus-CEP receive notifyContext from orion(as In-Event) for any chang ### Current Limitation * The incompatibility between multi-tenancy of Cepheus and serviceName/servicePath defined in providers, i.e., this will not work if we use different tenant in Cepheus CEP and orion. -* The outstanding bugs when using multi tenancy with Orion, mainly https://github.com/Orange-OpenSource/fiware-cepheus/issues/73 and https://github.com/Orange-OpenSource/fiware-cepheus/issues/64. +* The outstanding bugs when using multi tenancy with Orion, mainly [#73](https://github.com/Orange-OpenSource/fiware-cepheus/issues/73) and [#64](https://github.com/Orange-OpenSource/fiware-cepheus/issues/64). * Not yet "production ready".