Compare commits

...

465 Commits

Author SHA1 Message Date
TIP Automation User
4405c01b73 Chg: update image tag in helm values to v2.5.3 2022-09-15 11:37:18 +00:00
Dmitry Dunaev
c1db70d8c4 Merge pull request #196 from Telecominfraproject/feature/wifi-10842--docker-compose--iptocountry-2-5
[WIFI-10842] Add: docker-compose support for iptocountry
2022-09-15 14:29:54 +03:00
Dmitry Dunaev
ef6e4809f5 [WIFI-10842] Add: docker-compose support for iptocountry
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-09-15 14:29:04 +03:00
TIP Automation User
4b190a571f Chg: update image tag in helm values to v2.5.2 2022-07-26 10:29:43 +00:00
Dmitry Dunaev
c6b84434ea [WIFI-1998] Add: gracefull ingress deprecation
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-07-21 17:40:21 +03:00
Dmitry Dunaev
acad0cd99f Merge pull request #96 from Telecominfraproject/fix/wifi-9174--dep-charts-2.5
[WIFI-9174] Fix: switch from deprecated bitnami charts to mirrored ones
2022-06-03 15:52:43 +03:00
Dmitry Dunaev
7f675733df [WIFI-9174] Fix: switch from deprecated bitnami charts to mirrored ones
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-06-03 15:51:56 +03:00
Johann Hoffmann
4f1d05467f Update image tag in helm values to v2.5.1
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-04-29 19:06:38 +02:00
Johann Hoffmann
27bffaa734 Update image tag in helm values to v2.5.1-RC1
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-04-29 18:10:44 +02:00
stephb9959
b005b57137 Fixing https://telecominfraproject.atlassian.net/browse/WIFI-7812 2022-04-28 14:28:19 -07:00
TIP Automation User
2bae52e67e Chg: update image tag in helm values to v2.5.0 2022-03-30 13:48:16 +00:00
TIP Automation User
7766fe08cd Chg: update image tag in helm values to v2.5.0-RC1 2022-02-11 16:02:37 +00:00
stephb9959
f677c8765b Framework Update 2022-02-10 11:12:07 -08:00
stephb9959
c0c5dd7ac6 Framework Update 2022-02-10 08:08:28 -08:00
stephb9959
9c619367c3 Adding reverse serialnumber matching 2022-02-10 07:18:45 -08:00
stephb9959
a0a0a15f07 Adding reverse serialnumber matching 2022-02-10 07:10:18 -08:00
stephb9959
ab047be875 Adding reverse serialnumber matching 2022-02-10 07:02:48 -08:00
stephb9959
567b440db7 Adding reverse serialnumber matching 2022-02-10 06:59:41 -08:00
stephb9959
35fa62c8cc Adding reverse serialnumber matching 2022-02-10 06:56:39 -08:00
stephb9959
be374d683e Adding reverse serialnumber matching 2022-02-10 06:47:56 -08:00
stephb9959
cd3b867370 Fixing repeated commands getting into command list. 2022-02-09 23:01:25 -08:00
stephb9959
42bca6842c Fixing repeated commands getting into command list. 2022-02-09 22:47:47 -08:00
stephb9959
de3a96b62d Adding reverse serial number search 2022-02-09 15:08:38 -08:00
stephb9959
600ba8a2b5 Adding reverse serial number search 2022-02-09 15:03:50 -08:00
stephb9959
95a536dc1e Merge remote-tracking branch 'origin/master' 2022-02-08 22:21:16 -08:00
stephb9959
0639d09163 Framework update 2022-02-08 22:10:59 -08:00
Johann Hoffmann
f723ea719d Cut build lib copying
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-08 15:36:32 +01:00
stephb9959
5c83d76680 Adding capabilities file library for known device types. 2022-02-07 22:15:41 -08:00
stephb9959
ad977ad5eb Fixing capabilities cache for Provisioning. 2022-02-07 16:23:01 -08:00
stephb9959
a1c3e087c6 Fixing capabilities cache for Provisioning. 2022-02-07 16:17:06 -08:00
stephb9959
78d8af27b6 Fixing capabilities cache for Provisioning. 2022-02-07 16:13:40 -08:00
stephb9959
ac59ce3eda Fixing capabilities cache for Provisioning. 2022-02-07 15:57:37 -08:00
stephb9959
e473395cfe Fixing capabilities cache for Provisioning. 2022-02-07 15:51:09 -08:00
stephb9959
a9d89c7039 Fixing capabilities cache for Provisioning. 2022-02-07 15:40:12 -08:00
stephb9959
fdc66405c0 Improving serial number cache 2022-02-07 08:42:18 -08:00
stephb9959
f17f66db93 Merge remote-tracking branch 'origin/master' 2022-02-07 07:31:57 -08:00
stephb9959
07efbfcdd4 Removing debug messages. 2022-02-07 07:31:47 -08:00
Johann Hoffmann
a4d3b61799 Remove branch since PR was merged in composite actions repo
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-07 14:02:39 +01:00
stephb9959
096c2aafc7 Removing debug messages. 2022-02-06 23:24:53 -08:00
stephb9959
025c486b6c Removing debug messages. 2022-02-06 23:18:24 -08:00
stephb9959
70150d13e4 Removing debug messages. 2022-02-06 23:10:05 -08:00
stephb9959
374cab1b1c Adding IPtocountry API. 2022-02-06 23:02:05 -08:00
stephb9959
e17c59d844 Adding IPtocountry API. 2022-02-06 22:55:17 -08:00
stephb9959
db60feacc8 Adding IPtocountry API. 2022-02-05 20:51:48 -08:00
stephb9959
5420e23832 Adding IPtocountry API. 2022-02-05 20:47:05 -08:00
stephb9959
d6e5656e5a Adding "ipdata.co" as IP Info provider. 2022-02-05 11:35:27 -08:00
stephb9959
c9b7edcdd9 Fixed failure to connect for brand new devices. 2022-02-05 09:45:56 -08:00
stephb9959
5333f45f93 Reducing memory footprint. 2022-02-05 09:41:38 -08:00
stephb9959
737c432446 Reducing memory footprint. 2022-02-05 09:36:12 -08:00
stephb9959
4f44e17ee0 Merge remote-tracking branch 'origin/master' 2022-02-05 09:32:43 -08:00
stephb9959
262011e7bf Reducing memory footprint. 2022-02-05 09:32:35 -08:00
Stephane Bourque
d48a97673a Merge pull request #78 from Telecominfraproject/WIFI-6729-speed-up-image-build
[WIFI-6729] Speed up Docker image build time
2022-02-04 13:33:09 -08:00
stephb9959
19c8773768 Reducing memory footprint. 2022-02-04 11:42:14 -08:00
stephb9959
498f2aa1b5 Reducing memory footprint. 2022-02-04 11:28:47 -08:00
stephb9959
b696c50097 Reducing memory footprint. 2022-02-04 11:27:44 -08:00
stephb9959
585b4ae09e Reducing memory footprint. 2022-02-04 11:20:42 -08:00
stephb9959
9bf5dcad21 Reducing memory footprint. 2022-02-04 11:17:31 -08:00
stephb9959
0ad253bb3a Reducing memory footprint. 2022-02-04 11:10:32 -08:00
stephb9959
16894d4fb4 Reducing memory footprint. 2022-02-04 11:03:33 -08:00
stephb9959
976149bbde Reducing memory footpring. 2022-02-04 10:57:15 -08:00
stephb9959
fd4105127c Reducing memory footpring. 2022-02-04 09:48:19 -08:00
Johann Hoffmann
a7f77f3d91 Remove directory listing
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-04 16:25:19 +01:00
Johann Hoffmann
bbb7687f8b Revert "Try workaround"
This reverts commit 6333ca48d8.

Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-04 15:51:46 +01:00
Johann Hoffmann
6333ca48d8 Try workaround
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-04 15:33:31 +01:00
Johann Hoffmann
c19499deaa Add step for debugging
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-04 14:40:19 +01:00
Johann Hoffmann
358abb2a83 Revert "Add branch name to used composite action"
This reverts commit c259fdae8e.

Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-04 13:03:17 +01:00
Johann Hoffmann
c259fdae8e Add branch name to used composite action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-03 18:58:58 +01:00
Johann Hoffmann
f17a83a5cf Also check out PR branch for trigger-testing job to avoid post-action failure
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-03 18:32:57 +01:00
stephb9959
611e384117 Refactoring into smaller files. 2022-02-03 08:31:34 -08:00
Johann Hoffmann
e47756ab68 Check out PR branch for composite action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-03 14:53:33 +01:00
Johann Hoffmann
3709ea9a92 Re-structure Dockerfile and use docker-image-build composite action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-02-03 14:50:52 +01:00
stephb9959
62a2fbd6d7 Trying to solve https://telecominfraproject.atlassian.net/browse/WIFI-6850 2022-02-02 23:14:09 -08:00
stephb9959
c34a88343e Trying to solve https://telecominfraproject.atlassian.net/browse/WIFI-6850 2022-02-02 23:11:47 -08:00
stephb9959
7cd36da795 Trying to solve https://telecominfraproject.atlassian.net/browse/WIFI-6850 2022-02-02 22:55:39 -08:00
stephb9959
6f4a34c78d Framework update. 2022-02-02 11:03:06 -08:00
stephb9959
4d65beb440 Framework update. 2022-01-31 14:25:04 -08:00
stephb9959
15cdeb3578 Fixing https://telecominfraproject.atlassian.net/browse/WIFI-6811 2022-01-30 21:23:19 -08:00
stephb9959
1148705294 Fixing docker startup crash. 2022-01-30 21:00:25 -08:00
stephb9959
d0cd33af47 Extra logging 2022-01-30 20:26:22 -08:00
stephb9959
161758eca6 Extra logging 2022-01-30 20:24:21 -08:00
stephb9959
1cb4df113a Extra logging 2022-01-30 16:03:16 -08:00
stephb9959
8b1c053e7a Extra logging 2022-01-30 15:37:31 -08:00
stephb9959
f95f1dd501 Slight modification to default configuration initialization. 2022-01-30 12:49:00 -08:00
stephb9959
bdb4a218ee Slight modification to default configuration initialization. 2022-01-30 12:44:11 -08:00
stephb9959
970fabb604 Slight modification to default configuration initialization. 2022-01-30 12:33:11 -08:00
stephb9959
56e151481a Slight modification to default configuration initialization. 2022-01-30 12:29:50 -08:00
stephb9959
7e6e6c6884 Slight modification to default configuration initialization. 2022-01-30 12:24:10 -08:00
stephb9959
d977decd79 Changing startup for websocket connection and adding more logging... 2022-01-28 12:43:28 -08:00
stephb9959
876c50c916 Changing startup for websocket connection and adding more logging... 2022-01-28 10:37:41 -08:00
stephb9959
e3331a8fc2 Changing startup order... 2022-01-28 09:58:52 -08:00
stephb9959
39fa84e6ae Changing startup order... 2022-01-28 09:57:29 -08:00
stephb9959
037e3a01a4 Merge remote-tracking branch 'origin/master' 2022-01-28 09:38:06 -08:00
stephb9959
819d74c0d9 Changing startup order... 2022-01-28 09:37:57 -08:00
Dmitry Dunaev
4c753893c9 Merge pull request #77 from Telecominfraproject/feature/wifi-6837--chart-improvements
[WIFI-6837] Chg: modify readiness to make some envs optional, switch default helm service type to ClusterIP
2022-01-28 16:04:51 +03:00
Johann Hoffmann
037c82c689 Revert "Merge pull request #76 from Telecominfraproject/WIFI-6729-speed-up-image-build"
This reverts commit d3a6dc9161, reversing
changes made to 8f6e64e256.

Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-28 12:47:53 +01:00
Dmitry Dunaev
88acbf449d [WIFI-6837] Chg: modify readiness to make some envs optional, switch default helm service type to ClusterIP
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-01-28 13:50:02 +03:00
stephb9959
aa13cfa41b Merge remote-tracking branch 'origin/master' 2022-01-27 21:56:01 -08:00
stephb9959
c1522b9b0d Improving parsing of illegal JSON State messages 2022-01-27 21:55:51 -08:00
Stephane Bourque
d3a6dc9161 Merge pull request #76 from Telecominfraproject/WIFI-6729-speed-up-image-build
[WIFI-6729] Speed up Docker image build time
2022-01-27 14:43:01 -08:00
stephb9959
8f6e64e256 Fixing command manager janitor. 2022-01-27 11:46:53 -08:00
stephb9959
69488bdac1 Fixing command manager 2022-01-27 10:22:57 -08:00
stephb9959
ba3ff1577d Fixing command manager 2022-01-27 10:20:46 -08:00
stephb9959
8aa9cf8449 Adding new WiFI Scan. 2022-01-27 09:52:55 -08:00
stephb9959
dabefb781a Command manager update. 2022-01-27 09:04:34 -08:00
stephb9959
c247344faa Framework update. 2022-01-26 23:17:07 -08:00
stephb9959
f3532141da Framework update. 2022-01-26 15:10:45 -08:00
stephb9959
e049e2e5c7 Framework update. 2022-01-24 22:16:43 -08:00
stephb9959
481f18cb29 Framework update. 2022-01-23 22:51:12 -08:00
stephb9959
b783158b23 Framework update. 2022-01-23 10:20:30 -08:00
stephb9959
f982ef10d1 Adding kafka logging in framework. 2022-01-22 23:24:43 -08:00
stephb9959
6047364525 Adding kafka logging in framework. 2022-01-22 23:21:01 -08:00
stephb9959
0594f3310e Adding kafka logging in framework. 2022-01-22 23:14:36 -08:00
stephb9959
f888018a0b Adding kafka logging in framework. 2022-01-22 23:11:47 -08:00
stephb9959
54e308d3c5 Adding kafka logging in framework. 2022-01-22 23:07:15 -08:00
stephb9959
687b0a95a6 Adding kafka logging in framework. 2022-01-22 10:46:30 -08:00
stephb9959
5abfa205c9 Adding kafka logging in framework. 2022-01-22 10:43:06 -08:00
stephb9959
eb029b7b09 Adding kafka logging in framework. 2022-01-22 10:39:46 -08:00
stephb9959
92218e764c Adding kafka logging in framework. 2022-01-22 10:37:44 -08:00
stephb9959
66b75b8d9b Adding kafka logging in framework. 2022-01-22 10:27:47 -08:00
stephb9959
bfd76cd6be Adding kafka logging in framework. 2022-01-22 10:26:34 -08:00
stephb9959
3cf7609092 Adding kafka logging in framework. 2022-01-22 10:25:07 -08:00
Johann Hoffmann
cb61821f7b Re-structure Dockerfile and use Github Actions cache when building image
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-21 17:11:10 +01:00
stephb9959
86ec85ebd8 Merge remote-tracking branch 'origin/master' 2022-01-20 22:51:45 -08:00
stephb9959
ba8b02e630 Adding kafka logging in framework. 2022-01-20 22:51:37 -08:00
Dmitry Dunaev
ce26e48773 [WIFI-6752] Add: archiving for the database
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-01-20 12:41:10 +03:00
stephb9959
cc04b861ac OUI Server improvements. 2022-01-18 11:42:25 -08:00
stephb9959
3277451e8e OUI Server improvements. 2022-01-18 11:39:31 -08:00
stephb9959
eb5a5563c0 OUI Server improvements. 2022-01-18 11:37:25 -08:00
stephb9959
5f09b47b68 OUI Server improvements. 2022-01-18 11:19:23 -08:00
stephb9959
e2ad19c670 OUI Server improvements. 2022-01-18 11:11:28 -08:00
stephb9959
ee6273c248 Removing LifeTimeStats due to change in AP reporting. 2022-01-18 11:10:25 -08:00
stephb9959
c9f211439e Removing LifeTimeStats due to change in AP reporting. 2022-01-18 11:06:35 -08:00
stephb9959
f656296a9a Removing LifeTimeStats due to change in AP reporting. 2022-01-18 11:05:11 -08:00
stephb9959
764f3f3bef Removing LifeTimeStats due to change in AP reporting. 2022-01-18 09:49:50 -08:00
stephb9959
36dce2112b Telemetry fix 2022-01-18 00:00:43 -08:00
stephb9959
24709e45a6 Telemetry fix 2022-01-17 23:51:46 -08:00
stephb9959
a3dba734d3 Telemetry fix 2022-01-17 23:46:32 -08:00
stephb9959
07e2231763 Telemetry fix 2022-01-17 23:42:02 -08:00
stephb9959
0ba7a03bd5 Telemetry fix 2022-01-17 23:36:57 -08:00
stephb9959
39901ed547 Transition from counters -> deltas. 2022-01-17 23:28:55 -08:00
stephb9959
d9d03fe111 Transition from counters -> deltas. 2022-01-17 23:23:17 -08:00
stephb9959
1999838420 Transition from counters -> deltas. 2022-01-17 23:08:42 -08:00
stephb9959
05fa6a5806 Transition from counters -> deltas. 2022-01-17 23:03:39 -08:00
stephb9959
398bf0a94f Transition from counters -> deltas. 2022-01-17 22:08:17 -08:00
stephb9959
04a15eb629 Transition from counters -> deltas. 2022-01-17 22:04:44 -08:00
stephb9959
e84582a0d5 Merge remote-tracking branch 'origin/master' 2022-01-17 15:11:07 -08:00
stephb9959
b61a35d70d Transition from counters -> deltas. 2022-01-17 15:10:59 -08:00
Stephane Bourque
34304c2b80 Merge pull request #74 from Telecominfraproject/WIFI-5775-test-sdk-on-pr
[WIFI-5775] Run SDK tests on a PR level
2022-01-17 08:39:14 -08:00
Johann Hoffmann
d5ca25a3da Remove ref since PR was merged
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-17 17:38:45 +01:00
Johann Hoffmann
7f196193cc Pass versions as one JSON string
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-17 17:38:24 +01:00
Johann Hoffmann
b5ddcef66a Use trigger-workflow-and-wait composite action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-17 17:38:24 +01:00
Johann Hoffmann
0b61d0f943 Adapt logging configuration to newest changes
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-17 11:51:10 +01:00
Dmitry Dunaev
e2e75c3223 Merge pull request #73 from Telecominfraproject/feature/wifi-6393--add-wait-kafka-initcontainer
[WIFI-6393] Add: initContainer to wait for Kafka to be ready
2022-01-13 12:18:02 +03:00
Dmitry Dunaev
457802c56d [WIFI-6393] Add: initContainer to wait for Kafka to be ready
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-01-12 11:24:11 +03:00
stephb9959
88b13a8d0c Framework update 2022-01-11 23:17:16 -08:00
stephb9959
8c22f3576b Framework update 2022-01-10 22:42:53 -08:00
stephb9959
4c392361a9 Framework update 2022-01-10 14:21:47 -08:00
stephb9959
021ba4963b Framework update 2022-01-10 12:27:21 -08:00
stephb9959
d9868d47f7 Adding ThreadPool naming for debugging. 2022-01-10 09:01:34 -08:00
stephb9959
c2d2955538 Removing superfluous log messages. 2022-01-10 08:51:13 -08:00
stephb9959
1f20e12a56 Removing superfluous log messages. 2022-01-10 08:17:49 -08:00
stephb9959
3d733b861b Removing superfluous log messages. 2022-01-10 08:08:50 -08:00
stephb9959
333d20365d Removing superfluous log messages. 2022-01-09 23:24:26 -08:00
stephb9959
f3b00cd5c9 Removing superfluous log messages. 2022-01-09 23:21:37 -08:00
stephb9959
7b85d617aa Enabling new logging format. 2022-01-09 22:30:55 -08:00
stephb9959
9eb3b67064 Adding Kafka telemetry 2022-01-09 22:06:24 -08:00
stephb9959
4ed12d1f5b Adding Kafka telemetry 2022-01-09 21:44:52 -08:00
stephb9959
d2ede19e4a Adding Kafka telemetry 2022-01-09 21:35:42 -08:00
stephb9959
de028b8dc0 Adding Kafka telemetry 2022-01-09 21:23:35 -08:00
stephb9959
4ebd8b451b Adding Kafka telemetry 2022-01-09 21:21:29 -08:00
stephb9959
7889017579 Adding Kafka telemetry 2022-01-09 21:16:46 -08:00
stephb9959
7fb9c8c675 Adding Kafka telemetry 2022-01-09 21:12:26 -08:00
stephb9959
268c542602 Adding Kafka telemetry 2022-01-09 21:07:11 -08:00
stephb9959
01bf9ed000 Adding Kafka telemetry 2022-01-09 21:00:22 -08:00
stephb9959
00e1d15203 Adding Kafka telemetry 2022-01-09 20:50:01 -08:00
stephb9959
21bdeab870 Adding Kafka telemetry 2022-01-09 16:14:11 -08:00
stephb9959
467261b9ca Adding thread naming. 2022-01-09 09:58:12 -08:00
stephb9959
ae336478c0 Adding thread naming. 2022-01-09 09:35:47 -08:00
stephb9959
1479f8bde2 Adding thread naming. 2022-01-09 00:09:36 -08:00
stephb9959
10359d5de4 Adding thread naming. 2022-01-08 23:59:21 -08:00
stephb9959
fff323aee4 Adding thread naming. 2022-01-08 23:53:59 -08:00
stephb9959
9c87371535 Adding thread naming. 2022-01-08 23:43:43 -08:00
stephb9959
7ca1a0c6a9 Adding safer command execution code. 2022-01-08 22:11:04 -08:00
stephb9959
2238ba3c64 Adding safer command execution code. 2022-01-08 22:06:42 -08:00
stephb9959
4d3f0ee4d6 Adding PING command 2022-01-08 21:31:59 -08:00
stephb9959
2ea9c98b7b Adding PING command and execution time for RPC. 2022-01-08 21:28:07 -08:00
stephb9959
b6da3cb016 Adding PING command and execution time for RPC. 2022-01-08 21:15:15 -08:00
stephb9959
b841bdb6ca Adding PING command and execution time for RPC. 2022-01-08 21:13:05 -08:00
stephb9959
70978f577f Adding PING command and execution time for RPC. 2022-01-08 21:11:09 -08:00
stephb9959
846d55417f Adding PING command and execution time for RPC. 2022-01-08 21:07:05 -08:00
stephb9959
e3884ba062 Adding PING command and execution time for RPC. 2022-01-08 15:41:26 -08:00
stephb9959
0bf0186e50 Adding PING command and execution time for RPC. 2022-01-08 15:33:10 -08:00
stephb9959
1d0a0a0bd0 Changing RPC Command execution. 2022-01-08 10:33:11 -08:00
stephb9959
41f3f08432 Changing RPC Command execution. 2022-01-08 10:26:11 -08:00
stephb9959
e9403d878d Changing RPC Command execution. 2022-01-08 10:20:05 -08:00
stephb9959
d555600c75 Adding FIFO for telemetry 2022-01-06 22:24:30 -08:00
stephb9959
e18b57857d Adding FIFO for telemetry 2022-01-06 21:18:02 -08:00
stephb9959
7eb8d0d971 Adding FIFO for telemetry 2022-01-06 21:15:58 -08:00
stephb9959
865759f0dd Adding FIFO for telemetry 2022-01-06 21:05:42 -08:00
stephb9959
055549290b Adding FIFO for telemetry 2022-01-06 21:00:09 -08:00
stephb9959
ca702a172e Adding FIFO for telemetry 2022-01-06 13:29:33 -08:00
stephb9959
f4e8ef10a9 Adding FIFO for telemetry 2022-01-06 13:25:56 -08:00
stephb9959
7adc77d881 Adding FIFO for telemetry 2022-01-06 13:19:46 -08:00
stephb9959
a64e0418f9 Adding FIFO for telemetry 2022-01-06 12:03:51 -08:00
stephb9959
0b1d66c413 Adding FIFO for telemetry 2022-01-06 11:51:09 -08:00
stephb9959
1aafde15b4 ORM Update 2022-01-06 09:43:11 -08:00
stephb9959
03f0af07c8 Fixing typo 2022-01-05 22:23:05 -08:00
stephb9959
fa9eafc33b Fix for https://telecominfraproject.atlassian.net/browse/WIFI-6198 2022-01-04 18:01:02 -08:00
stephb9959
09fb78765c Fix for https://telecominfraproject.atlassian.net/browse/WIFI-6198 2022-01-04 09:06:18 -08:00
stephb9959
e7bfb960dc Fix for https://telecominfraproject.atlassian.net/browse/WIFI-6206 2022-01-04 08:55:44 -08:00
stephb9959
5e95f4eb67 Fix for https://telecominfraproject.atlassian.net/browse/WIFI-5992 2022-01-04 08:45:06 -08:00
stephb9959
eaaa8dbc15 Merge remote-tracking branch 'origin/master' 2022-01-04 08:32:57 -08:00
stephb9959
e93ce14f6e Framework update 2022-01-04 08:32:48 -08:00
Dmitry Dunaev
7c06be78fb Merge pull request #72 from Telecominfraproject/feature/wifi-6183--cli-review
[WIFI-6183] Chg: cli review and usage enhancement
2022-01-04 14:46:45 +03:00
Johann Hoffmann
b97da20446 Add curl cli script to Docker image
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-01-04 11:32:17 +01:00
Dmitry Dunaev
d7c17fbab1 [WIFI-6183] Chg: cli review and usage enhancement
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-01-03 15:48:44 +03:00
Dmitry Dunaev
68789fe9de Merge pull request #71 from Telecominfraproject/feature/wifi-4977--introduce-revisionHistoryLimit
[WIFI-4977] Add: helm add revisionHistoryLimit support
2021-12-23 16:27:11 +03:00
Dmitry Dunaev
724beb607c [WIFI-4977] Add: helm add revisionHistoryLimit support
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2021-12-23 16:08:25 +03:00
stephb9959
3ba845cf06 Framework update 2021-12-22 21:57:19 -08:00
stephb9959
4f6deba793 Framework update 2021-12-21 21:47:21 -08:00
stephb9959
ba1e735290 Framework update 2021-12-20 22:34:01 -08:00
stephb9959
be8877d346 Framework update 2021-12-20 22:30:07 -08:00
stephb9959
5922727336 Framework update 2021-12-20 22:26:35 -08:00
stephb9959
6f5902b3f0 Merge remote-tracking branch 'origin/master' 2021-12-20 22:10:42 -08:00
stephb9959
9c37930c99 Framework update 2021-12-20 22:10:34 -08:00
Johann Hoffmann
87ada37a76 [WIFI-6170] Add OpenWifi Docker Compose deployment with PostgreSQL (#70)
* Add wait-for-postgres.sh wrapper script

Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>

* Copy wait-for-postgres.sh into Docker image

Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-12-16 17:21:12 +01:00
stephb9959
c082910438 Merge remote-tracking branch 'origin/master' 2021-12-13 07:59:40 -08:00
stephb9959
777d67a649 Framework update 2021-12-13 07:59:32 -08:00
Johann Hoffmann
563032eecc Add config property to templating mechanism
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-12-13 16:46:27 +01:00
stephb9959
88dd85cf26 Framework update 2021-12-12 19:06:52 -08:00
stephb9959
33c7da572e Framework update 2021-12-11 23:25:36 -08:00
stephb9959
d8bfa28a21 Framework update 2021-12-10 13:17:20 -08:00
stephb9959
09f482a3d4 Framework update 2021-12-07 20:38:46 -08:00
stephb9959
93e09cc2dd Unitialied counters in healthcheck. 2021-12-07 10:28:42 -08:00
stephb9959
a71adc417c Build number fix 2021-12-07 08:51:09 -08:00
Dmitry Dunaev
0dae09ac9a Add: .git dir to build image to expose git hash for version
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2021-12-07 14:05:58 +03:00
stephb9959
771bd51be7 Add git hash 2021-12-06 08:00:22 -08:00
stephb9959
7d5d6177d2 Adding "completeInfo" on device get and list. 2021-12-06 06:30:02 -08:00
stephb9959
0530a4c03f Adding "completeInfo" on device get and list. 2021-12-06 06:17:27 -08:00
stephb9959
6eead07d1c Adding "completeInfo" on device get and list. 2021-12-06 06:11:01 -08:00
stephb9959
c7452aeeb9 Merge remote-tracking branch 'origin/master' 2021-12-06 06:05:30 -08:00
stephb9959
669638a4e3 Adding "completeInfo" on device get and list. 2021-12-06 06:05:21 -08:00
Dmitry Dunaev
d2bfc38736 [WIFI-5840] Chg: failureThreshold for readiness_check up to 3 2021-12-06 15:18:32 +03:00
stephb9959
58a1740294 Adding "completeInfo" on device get and list. 2021-12-05 23:05:41 -08:00
stephb9959
c00effc8bc Adding "completeInfo" on device get and list. 2021-12-05 22:54:33 -08:00
stephb9959
8b22611142 Adding "completeInfo" on device get. 2021-12-05 22:36:46 -08:00
stephb9959
6a4bbc3362 Adding "completeInfo" on device get. 2021-12-05 22:32:13 -08:00
stephb9959
88867aea73 Fixing OWLS security hole. 2021-12-02 10:17:52 -08:00
stephb9959
d7ece096ac Assigning proper names. 2021-12-02 08:59:15 -08:00
stephb9959
227114f247 Adding image library 2021-12-01 20:29:09 -08:00
stephb9959
8b2741d624 Merge remote-tracking branch 'origin/master' 2021-11-30 23:40:40 -08:00
stephb9959
2e18694e40 Improving build instructions. 2021-11-30 23:40:11 -08:00
Stephane Bourque
1715703c4e Merge pull request #68 from Telecominfraproject/WIFI-5775-test-sdk-on-pr
[WIFI-5775] Run SDK tests on a PR level
2021-11-30 20:57:08 -08:00
stephb9959
a5e7c1dc8a Framework update 2021-11-30 20:46:04 -08:00
stephb9959
5f325e75d5 Framework update 2021-11-30 20:15:43 -08:00
stephb9959
49aeddb186 Framework update 2021-11-30 10:27:04 -08:00
stephb9959
5413e2cdf3 Merge remote-tracking branch 'origin/master' 2021-11-29 15:55:06 -08:00
stephb9959
2190652029 Adding proper status report when a device is not connected. 2021-11-29 15:54:55 -08:00
Johann Hoffmann
77229ee248 Switch to trigger-workflow-and-wait Community action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-29 14:28:40 +01:00
Johann Hoffmann
9db7fea7cd Revert "Merge pull request #67 from Telecominfraproject/WIFI-5775-test-sdk-on-pr"
This reverts commit 65811c5e7f, reversing
changes made to e70303f986.
2021-11-29 13:38:03 +01:00
Stephane Bourque
65811c5e7f Merge pull request #67 from Telecominfraproject/WIFI-5775-test-sdk-on-pr
Test trigger of wlan-testing workflow
2021-11-28 08:29:37 -08:00
stephb9959
e70303f986 Initial commit of dependent files for rtty built-in server 2021-11-27 21:27:47 -08:00
stephb9959
b55b0a23d7 Removing RTTY debug logs. 2021-11-27 21:13:36 -08:00
stephb9959
f66a2d0bdc Removing RTTY debug logs. 2021-11-27 21:07:27 -08:00
stephb9959
200f0cbe79 Removing RTTY debug logs. 2021-11-27 20:57:00 -08:00
stephb9959
2d833c33d3 Support both internal and external rttys 2021-11-27 20:53:21 -08:00
stephb9959
9d7afe9fa4 Support both internal and external rttys 2021-11-27 20:50:25 -08:00
stephb9959
42bc5321aa Support both internal and external rttys 2021-11-27 20:37:55 -08:00
stephb9959
dabfb9b949 Support both internal and external rttys 2021-11-27 20:29:19 -08:00
stephb9959
f344a23f3a Support both internal and external rttys 2021-11-27 17:58:57 -08:00
stephb9959
0c83ed528a Support both internal and external rttys 2021-11-27 17:30:40 -08:00
stephb9959
bdf37c7f8a Support both internal and external rttys 2021-11-27 17:19:22 -08:00
stephb9959
fff91dd572 Support both internal and external rttys 2021-11-27 17:15:48 -08:00
stephb9959
2a7ce8c297 Support both internal and external rttys 2021-11-27 17:12:47 -08:00
stephb9959
5a17f7e727 Support both internal and external rttys 2021-11-27 17:06:09 -08:00
stephb9959
a25e456b8b Support both internal and external rttys 2021-11-27 16:47:16 -08:00
stephb9959
7d68dd40c3 Support both internal and external rttys 2021-11-27 16:40:31 -08:00
stephb9959
5784a6297b Support both internal and external rttys 2021-11-27 13:26:34 -08:00
stephb9959
b6b3fbaac9 Support both internal and external rttys 2021-11-27 13:19:42 -08:00
stephb9959
617d018252 Support both internal and external rttys 2021-11-27 13:06:07 -08:00
stephb9959
a1e4019ee8 Support both internal and external rttys 2021-11-27 11:43:14 -08:00
stephb9959
11a63628b3 Support both internal and external rttys 2021-11-27 11:41:05 -08:00
stephb9959
49f523d831 Support both internal and external rttys 2021-11-27 11:17:25 -08:00
stephb9959
7ac0866f4c Support both internal and external rttys 2021-11-27 11:15:20 -08:00
stephb9959
6ae29a7b5f Support both internal and external rttys 2021-11-27 11:12:10 -08:00
stephb9959
d88fe4eea3 Support both internal and external rttys 2021-11-27 11:07:36 -08:00
stephb9959
89a5a0efc9 Support both internal and external rttys 2021-11-27 11:03:41 -08:00
stephb9959
6f6e365393 Support both internal and external rttys 2021-11-27 10:53:10 -08:00
stephb9959
d56acf1ffe Support both internal and external rttys 2021-11-27 10:35:31 -08:00
stephb9959
a10ce9f304 Support both internal and external rttys 2021-11-27 10:32:52 -08:00
stephb9959
d40e926971 Support both internal and external rttys 2021-11-27 10:28:21 -08:00
stephb9959
e96f222c45 Support both internal and external rttys 2021-11-27 10:01:34 -08:00
stephb9959
30fc21e6cb Support both internal and external rttys 2021-11-27 09:46:12 -08:00
stephb9959
deea40cbc4 Support both internal and external rttys 2021-11-27 09:27:49 -08:00
stephb9959
9a36ad60e1 Support both internal and external rttys 2021-11-27 09:23:40 -08:00
stephb9959
53cea05c95 Support both internal and external rttys 2021-11-27 09:18:56 -08:00
stephb9959
9b96b88de2 Support both internal and external rttys 2021-11-27 09:11:22 -08:00
stephb9959
2cc70a6af1 Support both internal and external rttys 2021-11-27 09:00:19 -08:00
stephb9959
f6653cf818 Support both internal and external rttys 2021-11-27 08:56:43 -08:00
stephb9959
127fe2100c Support both internal and external rttys 2021-11-27 08:50:41 -08:00
stephb9959
3645718352 Support both internal and external rttys 2021-11-27 08:45:17 -08:00
stephb9959
724ae46752 Support both internal and external rttys 2021-11-27 08:42:31 -08:00
stephb9959
70ff02fea2 Support both internal and external rttys 2021-11-27 08:35:05 -08:00
stephb9959
5d6ed11cd9 Support both internal and external rttys 2021-11-27 08:30:59 -08:00
stephb9959
23f6b34fe9 Support both internal and external rttys 2021-11-27 08:19:43 -08:00
stephb9959
a864502c3e Support both internal and external rttys 2021-11-26 23:56:14 -08:00
stephb9959
33ba38938c Support both internal and external rttys 2021-11-26 23:48:52 -08:00
stephb9959
9f65476795 Support both internal and external rttys 2021-11-26 23:44:16 -08:00
stephb9959
712459e5eb Support both internal and external rttys 2021-11-26 23:39:35 -08:00
stephb9959
68e4df6de3 Support both internal and external rttys 2021-11-26 23:21:51 -08:00
stephb9959
4a49ed347c Support both internal and external rttys 2021-11-26 23:20:02 -08:00
stephb9959
5a8ac97d9a Support both internal and external rttys 2021-11-26 23:10:35 -08:00
stephb9959
1ac3fb2f44 Support both internal and external rttys 2021-11-26 22:57:05 -08:00
stephb9959
88cd05b629 Support both internal and external rttys 2021-11-26 22:55:25 -08:00
stephb9959
c74efb0287 Support both internal and external rttys 2021-11-26 22:38:47 -08:00
stephb9959
5e8b23cbeb Support both internal and external rttys 2021-11-26 22:35:12 -08:00
stephb9959
e47c9ea07a Support both internal and external rttys 2021-11-26 22:23:12 -08:00
stephb9959
4a4ed2039b Support both internal and external rttys 2021-11-26 22:19:56 -08:00
stephb9959
e65987dd8f Support both internal and external rttys 2021-11-26 22:05:35 -08:00
stephb9959
d07608c7a1 Support both internal and external rttys 2021-11-26 19:54:42 -08:00
stephb9959
4b49e0d4b1 Support both internal and external rttys 2021-11-26 18:55:42 -08:00
stephb9959
9f21328d55 Support both internal and external rttys 2021-11-26 16:00:02 -08:00
stephb9959
eed4263076 Support both internal and external rttys 2021-11-26 15:25:47 -08:00
stephb9959
3e84e8fde5 Support both internal and external rttys 2021-11-26 15:23:53 -08:00
stephb9959
fc28bcffd2 Support both internal and external rttys 2021-11-26 14:56:54 -08:00
stephb9959
dae71c0ca9 Support both internal and external rttys 2021-11-26 14:56:13 -08:00
stephb9959
78d2f16e4e Support both internal and external rttys 2021-11-26 14:52:26 -08:00
Johann Hoffmann
a61962d1ff Switch to latest version
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-26 13:01:15 +01:00
Johann Hoffmann
36a5f9bcdd Fix input names
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-26 12:29:09 +01:00
Johann Hoffmann
c09d65b25d Add branch input
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-26 11:53:56 +01:00
stephb9959
ecc39b6a6f srtty 2021-11-26 00:02:52 -08:00
stephb9959
b0947c973d srtty 2021-11-25 23:58:48 -08:00
stephb9959
328bec9948 srtty 2021-11-25 23:43:58 -08:00
stephb9959
4920f293f5 srtty 2021-11-25 23:40:34 -08:00
stephb9959
9e4af88bc3 srtty 2021-11-25 22:35:54 -08:00
stephb9959
063ceada41 srtty 2021-11-25 22:21:01 -08:00
stephb9959
4749345f49 srtty 2021-11-25 22:08:40 -08:00
stephb9959
14dc41b8ce srtty 2021-11-25 21:42:58 -08:00
stephb9959
48a56c7802 srtty 2021-11-25 21:38:40 -08:00
stephb9959
e8fb42644d srtty 2021-11-25 21:30:47 -08:00
stephb9959
3e663de7fa srtty 2021-11-25 21:11:44 -08:00
stephb9959
409c0e1f90 srtty 2021-11-25 21:07:27 -08:00
stephb9959
1a67850aec srtty 2021-11-25 20:15:33 -08:00
stephb9959
3bb67b3a62 srtty 2021-11-25 20:13:57 -08:00
stephb9959
a864b8170d srtty 2021-11-25 19:58:14 -08:00
stephb9959
72b3b0c119 srtty 2021-11-25 19:55:29 -08:00
stephb9959
8039243cb3 srtty 2021-11-25 19:51:30 -08:00
stephb9959
a90e89b16b srtty 2021-11-25 19:46:38 -08:00
stephb9959
1742535a71 srtty 2021-11-25 19:30:37 -08:00
stephb9959
b96c4f74ec srtty 2021-11-25 17:24:10 -08:00
stephb9959
f224097c17 srtty 2021-11-25 17:09:08 -08:00
stephb9959
2815f2c3a2 srtty 2021-11-25 17:07:35 -08:00
stephb9959
43b933bc39 srtty 2021-11-25 17:01:02 -08:00
stephb9959
0e169a92eb srtty 2021-11-25 16:23:05 -08:00
stephb9959
73a9802ed9 srtty 2021-11-25 16:05:46 -08:00
stephb9959
b760b6451c srtty 2021-11-25 15:55:24 -08:00
stephb9959
73c317ce49 srtty 2021-11-25 13:52:06 -08:00
stephb9959
9ad45b0f73 srtty 2021-11-25 13:45:50 -08:00
stephb9959
bd27d4403f srtty 2021-11-25 13:24:45 -08:00
stephb9959
b676310e4b srtty 2021-11-25 13:12:42 -08:00
stephb9959
69d41fd14d srtty 2021-11-25 13:10:23 -08:00
stephb9959
46ad6c0933 srtty 2021-11-25 13:01:45 -08:00
stephb9959
b5b97adbed srtty 2021-11-25 12:49:39 -08:00
stephb9959
527897fe5b srtty 2021-11-25 12:06:20 -08:00
stephb9959
5f58594f1c srtty 2021-11-25 12:03:38 -08:00
stephb9959
7f7326e876 srtty 2021-11-25 11:56:37 -08:00
stephb9959
fda7b14a62 srtty 2021-11-25 11:52:24 -08:00
stephb9959
04b2ee926c srtty 2021-11-25 11:47:26 -08:00
stephb9959
e4aca1a137 srtty 2021-11-25 11:44:07 -08:00
stephb9959
4af688de77 srtty 2021-11-25 11:38:17 -08:00
stephb9959
7c20f22f46 srtty 2021-11-25 11:18:56 -08:00
stephb9959
d7171daaa7 srtty 2021-11-25 11:10:34 -08:00
stephb9959
3a5c406f1c srtty 2021-11-25 11:01:54 -08:00
stephb9959
5643d237fd srtty 2021-11-25 10:52:40 -08:00
stephb9959
cec893466e srtty 2021-11-25 10:35:14 -08:00
stephb9959
f390075e92 srtty 2021-11-25 10:25:19 -08:00
stephb9959
c4d47a0ebf srtty 2021-11-25 10:24:38 -08:00
stephb9959
ab75abfef4 srtty 2021-11-25 10:01:56 -08:00
stephb9959
714d8fc857 Perform Device Existence check before accepting commands. 2021-11-25 09:15:28 -08:00
stephb9959
c1ca8421b5 Perform Device Existence check before accepting commands. 2021-11-25 09:08:15 -08:00
stephb9959
6d9c5eae46 Perform Device Existence check before accepting commands. 2021-11-25 08:40:42 -08:00
stephb9959
d64032785a Perform Device Existence check before accepting commands. 2021-11-25 08:32:31 -08:00
stephb9959
9865e19385 Perform Device Existence check before accepting commands. 2021-11-25 08:04:21 -08:00
Johann Hoffmann
f88ac7711f Add required input
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-25 17:03:58 +01:00
Johann Hoffmann
d91c7e61be Remove input
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-25 17:01:39 +01:00
Johann Hoffmann
d02fff040b Test another community Github action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-25 16:59:48 +01:00
Johann Hoffmann
1fb4d0d633 Fix input names
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-25 16:29:44 +01:00
Johann Hoffmann
81d76536fb Test dispatch-and-wait community Github Action
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-25 16:27:06 +01:00
stephb9959
36e4e36188 RTTYS fixes 2021-11-24 23:33:50 -08:00
stephb9959
b3f3c87f7e RTTYS fixes 2021-11-24 23:20:05 -08:00
stephb9959
599c8787c3 RTTYS fixes 2021-11-24 23:11:37 -08:00
stephb9959
ba4edde793 RTTYS fixes 2021-11-24 22:56:46 -08:00
stephb9959
66680636f3 RTTYS fixes 2021-11-24 22:46:20 -08:00
stephb9959
cdd29fa6e2 RTTYS fixes 2021-11-24 22:45:24 -08:00
stephb9959
f4e5b4b0ed RTTYS fixes 2021-11-24 22:34:15 -08:00
stephb9959
d9bba781d4 RTTYS fixes 2021-11-24 21:42:38 -08:00
stephb9959
ded5c3c0f5 RTTYS fixes 2021-11-24 21:36:15 -08:00
stephb9959
093e92fbb6 RTTYS fixes 2021-11-24 21:27:21 -08:00
stephb9959
6fd6941860 RTTYS fixes 2021-11-24 21:22:53 -08:00
stephb9959
f46337a35e RTTYS fixes 2021-11-24 21:12:32 -08:00
stephb9959
8c9332c109 RTTYS fixes 2021-11-24 21:04:20 -08:00
stephb9959
4902bb2583 RTTYS fixes 2021-11-24 20:52:20 -08:00
stephb9959
933cf82a41 RTTYS fixes 2021-11-24 20:47:55 -08:00
stephb9959
3e828ac11f RTTYS fixes 2021-11-24 20:30:13 -08:00
stephb9959
0929851ed8 fixing OUIserver startup. 2021-11-24 20:16:56 -08:00
stephb9959
d7c08f1068 fixing OUIserver startup. 2021-11-24 19:54:52 -08:00
stephb9959
b656c59962 fixing OUIserver startup. 2021-11-24 19:43:25 -08:00
stephb9959
3356dbb2e3 fixing OUIserver startup. 2021-11-24 19:40:16 -08:00
stephb9959
ca87dcb9a1 rttys v1 2021-11-24 10:04:05 -08:00
stephb9959
07ffc5e8b5 rttys v1 2021-11-24 09:34:21 -08:00
stephb9959
14fa2e3543 rttys v1 2021-11-24 09:26:50 -08:00
stephb9959
38934cdfc2 rttys v1 2021-11-24 09:25:33 -08:00
stephb9959
43d1574fdc rttys v1 2021-11-24 09:11:17 -08:00
stephb9959
d40567b7ff rttys v1 2021-11-24 09:10:31 -08:00
stephb9959
5e9a631789 rttys v1 2021-11-24 09:07:51 -08:00
Johann Hoffmann
6859a90fa1 Fix variable syntax
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-24 16:11:49 +01:00
Johann Hoffmann
769438a383 Re-add job condition
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-24 15:59:44 +01:00
Johann Hoffmann
34385c5ab6 Test manual repository dispatch API call
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-24 15:55:02 +01:00
Johann Hoffmann
b082617924 Dummy commit to test PR workflow run
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-23 17:49:35 +01:00
stephb9959
356e97b856 Optimizing websocket connect. 2021-11-22 23:05:29 -08:00
stephb9959
e50a1efb86 Improving performance with less DB calls. 2021-11-22 22:34:44 -08:00
stephb9959
ed3355eea7 Adding blacklist cache. 2021-11-22 22:13:02 -08:00
stephb9959
9ae63a8c7e Adding blacklist cache. 2021-11-22 22:11:04 -08:00
stephb9959
5c89d08669 Fixing capabilities on first contact. 2021-11-22 19:56:37 -08:00
stephb9959
068934eaa3 Improving Capabilities Insert call. 2021-11-22 15:57:14 -08:00
stephb9959
f75f6d5844 Improving Capabilities Insert call. 2021-11-22 14:19:58 -08:00
stephb9959
32fdd0f1a9 Added kafka message about deleting a device. 2021-11-21 23:37:25 -08:00
stephb9959
04141c3e4d Adding radio regulatory auto setup. 2021-11-21 09:30:20 -08:00
stephb9959
4b3654b05e Adding find IP. 2021-11-21 00:25:48 -08:00
stephb9959
2b9f9e16ae Adding find IP. 2021-11-21 00:23:07 -08:00
stephb9959
c08d06c3c3 Adding find IP. 2021-11-21 00:19:45 -08:00
stephb9959
e47979ed6d Adding find IP. 2021-11-21 00:11:15 -08:00
stephb9959
563e84aede Adding find IP. 2021-11-21 00:04:25 -08:00
stephb9959
380f1df811 Addressing mesh nodes appearing as disconnected after a perdio of time while they are still connected. 2021-11-20 22:07:23 -08:00
stephb9959
4419af1e0f Merge remote-tracking branch 'origin/master' 2021-11-20 21:40:05 -08:00
stephb9959
629b53c4e9 Addressing mesh nodes appearing as disconnected after a perdio of time while they are still connected. 2021-11-20 21:39:56 -08:00
Stephane Bourque
2cbab49c87 Merge pull request #65 from Telecominfraproject/WIFI-5775-pr-sdk-tests
[WIFI-5775] Run SDK tests on a PR level
2021-11-19 11:53:37 -08:00
stephb9959
d064b7c889 Detecting duplicate names. 2021-11-19 10:42:53 -08:00
stephb9959
80b6391e75 Detecting duplicate names. 2021-11-19 10:30:25 -08:00
stephb9959
82441dc289 Fixing LOG statements for SQL exceptions. 2021-11-19 10:13:35 -08:00
stephb9959
4cbfe039fc Fixing default configuration validation. 2021-11-19 09:47:30 -08:00
stephb9959
bfca4ccd6f Fixing default configuration validation. 2021-11-19 09:19:57 -08:00
stephb9959
b540172e0b Fixing default configuration validation. 2021-11-19 09:12:23 -08:00
stephb9959
5361ab05a3 Merge remote-tracking branch 'origin/master' 2021-11-19 09:10:34 -08:00
stephb9959
8e169067d2 Fixing default configuration validation. 2021-11-19 09:10:25 -08:00
Dmitry Dunaev
59fd796458 [WIFI-4860] Chg: switch enforce-jira-issue-key to composite action 2021-11-19 16:22:37 +03:00
Dmitry Dunaev
fa6c227d04 Merge pull request #64 from Telecominfraproject/feature/wifi-4860--add-ensure-jira-issue-key-workflow
[WIFI-4860] Add: enforce-jira-issue-key workflow
2021-11-19 15:50:12 +03:00
Dmitry Dunaev
001fcd311d Merge pull request #63 from Telecominfraproject/feature/wifi-5420--add-sysctl-context
[WIFI-5420] Add: support for unsafe sysctls with psp
2021-11-19 14:27:36 +03:00
Dmitry Dunaev
e9d3cc8796 [WIFI-4860] Add: enforce-jira-issue-key workflow
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2021-11-19 13:18:19 +03:00
Dmitry Dunaev
f639ea9b39 Merge branch 'master' into feature/wifi-5420--add-sysctl-context
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2021-11-19 12:48:51 +03:00
stephb9959
20201d366b Adding "leep redirector" to firmware upgrade. 2021-11-18 21:26:51 -08:00
stephb9959
a4db631031 Adding proper capabilities/platform cache. 2021-11-18 20:42:37 -08:00
stephb9959
963dabbb14 Adding proper capabilities/platform cache. 2021-11-18 20:40:07 -08:00
stephb9959
4f944cc0af Adding proper capabilities/platform cache. 2021-11-18 20:19:26 -08:00
Johann Hoffmann
b413368c6c Trigger testing with Docker Compose deployment
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2021-11-18 15:38:49 +01:00
Dmitry Dunaev
87b054f98d [WIFI-5420] Add: support for unsafe sysctls with psp 2021-11-18 12:34:55 +03:00
stephb9959
b8c0f95bc5 Adding proper capabilities/platform cache. 2021-11-17 23:09:28 -08:00
stephb9959
c192b90caa Adding proper capabilities/platform cache. 2021-11-17 22:56:27 -08:00
stephb9959
0f3a8810cf Fixing DB offset/limit computation. 2021-11-17 15:49:57 -08:00
stephb9959
a2d483eff3 Fixing DB offset/limit computation. 2021-11-17 15:41:31 -08:00
stephb9959
bd09e72707 Framework update. 2021-11-17 15:29:01 -08:00
stephb9959
9b1d184be9 Framework update. 2021-11-17 15:27:10 -08:00
stephb9959
d25bc2c6a3 Framework update. 2021-11-17 13:56:10 -08:00
stephb9959
b02f54badc Framework update. 2021-11-17 07:50:34 -08:00
stephb9959
23b3e9b279 New UUIDv4 Generator 2021-11-16 22:15:18 -08:00
202 changed files with 9481 additions and 5665 deletions

View File

@@ -25,105 +25,44 @@ jobs:
DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io DOCKER_REGISTRY_URL: tip-tip-wlan-cloud-ucentral.jfrog.io
DOCKER_REGISTRY_USERNAME: ucentral DOCKER_REGISTRY_USERNAME: ucentral
steps: steps:
- uses: actions/checkout@v2 - name: Checkout actions repo
uses: actions/checkout@v2
- name: Build Docker image
run: docker build -t wlan-cloud-owgw:${{ github.sha }} .
- name: Tag Docker image
run: |
TAGS="${{ github.sha }}"
if [[ ${GITHUB_REF} == "refs/heads/"* ]]
then
CURRENT_TAG=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '-')
TAGS="$TAGS $CURRENT_TAG"
else
if [[ ${GITHUB_REF} == "refs/tags/"* ]]
then
CURRENT_TAG=$(echo ${GITHUB_REF#refs/tags/} | tr '/' '-')
TAGS="$TAGS $CURRENT_TAG"
else # PR build
CURRENT_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
TAGS="$TAGS $CURRENT_TAG"
fi
fi
echo "Result tags: $TAGS"
for tag in $TAGS; do
docker tag wlan-cloud-owgw:${{ github.sha }} ${{ env.DOCKER_REGISTRY_URL }}/owgw:$tag
done
- name: Log into Docker registry
if: startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/pull/') || github.ref == 'refs/heads/master'
uses: docker/login-action@v1
with: with:
registry: ${{ env.DOCKER_REGISTRY_URL }} repository: Telecominfraproject/.github
username: ${{ env.DOCKER_REGISTRY_USERNAME }} path: github
password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Push Docker images - name: Build and push Docker image
if: startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/pull/') || github.ref == 'refs/heads/master' uses: ./github/composite-actions/docker-image-build
run: | with:
docker images | grep ${{ env.DOCKER_REGISTRY_URL }}/owgw | awk -F ' ' '{print $1":"$2}' | xargs -I {} docker push {} image_name: owgw
registry: tip-tip-wlan-cloud-ucentral.jfrog.io
registry_user: ucentral
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
docker-compose: trigger-testing:
if: startsWith(github.ref, 'refs/tags/') || startsWith(github.ref, 'refs/pull/') || github.ref == 'refs/heads/master' if: startsWith(github.ref, 'refs/pull/')
runs-on: ubuntu-20.04 runs-on: ubuntu-latest
needs: docker needs: docker
steps: steps:
- name: Check out wlan-cloud-ucentral-deploy repository - name: Get base branch name and set as output
id: get_base_branch
run: |
echo ::set-output name=branch::$(echo ${GITHUB_BASE_REF##*/} | sed 's/master/main/g')
- name: Checkout actions repo
uses: actions/checkout@v2 uses: actions/checkout@v2
with: with:
repository: Telecominfraproject/wlan-cloud-ucentral-deploy repository: Telecominfraproject/.github
path: wlan-cloud-ucentral-deploy path: github
- name: Instantiate Docker Compose deployment - name: Trigger testing of OpenWifi Docker Compose deployment and wait for result
working-directory: ./wlan-cloud-ucentral-deploy/docker-compose uses: ./github/composite-actions/trigger-workflow-and-wait
env: env:
OWGW_TAG: ${{ github.sha }} BASE_BRANCH: ${{ steps.get_base_branch.outputs.branch }}
run: |
docker-compose up -d
- name: Wait for OWSec to be alive and kicking
run: |
n=0
until [ "$n" -ge 3 ]
do
curl -s 127.0.0.1:16102 && break
n=$((n+1))
if [ "$n" -eq 3]; then
exit 1
else
sleep 3
fi
done
- name: Check out wlan-cloud-ucentralgw repository
uses: actions/checkout@v2
with: with:
path: wlan-cloud-ucentralgw owner: Telecominfraproject
repo: wlan-testing
- name: Check functionality of microservices workflow: ow_docker-compose.yml
env: token: ${{ secrets.WLAN_TESTING_PAT }}
OWSEC: "openwifi.wlan.local:16001" ref: master
FLAGS: "-s --cacert ./wlan-cloud-ucentral-deploy/docker-compose/certs/restapi-ca.pem --resolve openwifi.wlan.local:16001:127.0.0.1" inputs: '{"owgw_version": "${{ github.sha }}", "owgwui_version": "${{ env.BASE_BRANCH }}", "owsec_version": "${{ env.BASE_BRANCH }}", "owfms_version": "${{ env.BASE_BRANCH }}", "owprov_version": "main", "owprovui_version": "main"}'
run: |
./wlan-cloud-ucentralgw/test_scripts/curl/cli listdevices
- name: Display information about running containers and log ucentralgw output
working-directory: ./wlan-cloud-ucentral-deploy/docker-compose
if: always()
run: |
docker-compose ps -a
docker-compose logs
# disable until repo is public
#- name: export Docker image
# run: docker image save -o wlan-cloud-ucentralgw-${{ github.sha }}.tar wlan-cloud-ucentralgw:${{ github.sha }}
#- uses: actions/upload-artifact@v2
# with:
# name: docker-image
# path: wlan-cloud-ucentralgw-${{ github.sha }}.tar

View File

@@ -0,0 +1,24 @@
name: Ensure Jira issue is linked
on:
pull_request:
types: [opened, edited, reopened, synchronize]
branches:
- 'release/*'
jobs:
check_for_issue_key:
runs-on: ubuntu-latest
steps:
- name: Checkout actions repo
uses: actions/checkout@v2
with:
repository: Telecominfraproject/.github
path: github
- name: Run JIRA check
uses: ./github/composite-actions/enforce-jira-issue-key
with:
jira_base_url: ${{ secrets.TIP_JIRA_URL }}
jira_user_email: ${{ secrets.TIP_JIRA_USER_EMAIL }}
jira_api_token: ${{ secrets.TIP_JIRA_API_TOKEN }}

View File

@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
project(owgw VERSION 2.4.0) project(owgw VERSION 2.5.0)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
@@ -20,16 +20,28 @@ endif()
# Auto build increment. You must define BUILD_INCREMENT with cmake -DBUILD_INCREMENT=1 # Auto build increment. You must define BUILD_INCREMENT with cmake -DBUILD_INCREMENT=1
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build)
file(READ build BUILD_NUM) file(READ ${CMAKE_CURRENT_SOURCE_DIR}/build BUILD_NUM)
if(BUILD_INCREMENT) if(BUILD_INCREMENT)
MATH(EXPR BUILD_NUM "${BUILD_NUM}+1") MATH(EXPR BUILD_NUM "${BUILD_NUM}+1")
file(WRITE build ${BUILD_NUM}) file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/build ${BUILD_NUM})
endif() endif()
else() else()
set(BUILD_NUM 1) set(BUILD_NUM 1)
file(WRITE build ${BUILD_NUM}) file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/build ${BUILD_NUM})
endif() endif()
add_definitions(-DAPP_VERSION="${CMAKE_PROJECT_VERSION}" -DBUILD_NUMBER="${BUILD_NUM}")
find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
execute_process(COMMAND ${GIT_EXECUTABLE} describe --always --tags
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE GIT_RESULT
OUTPUT_VARIABLE GIT_HASH)
if(NOT GIT_RESULT EQUAL "0")
message(FATAL_ERROR "git describe --always --tags failed with ${GIT_RESULT}")
endif()
string(REGEX REPLACE "\n$" "" GIT_HASH "${GIT_HASH}")
endif()
add_definitions(-DTIP_GATEWAY_SERVICE="1") add_definitions(-DTIP_GATEWAY_SERVICE="1")
set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_STATIC_LIBS OFF)
@@ -52,8 +64,11 @@ endif()
include_directories(/usr/local/include /usr/local/opt/openssl/include src include/kafka /usr/local/opt/mysql-client/include) include_directories(/usr/local/include /usr/local/opt/openssl/include src include/kafka /usr/local/opt/mysql-client/include)
configure_file(src/ow_version.h.in ${PROJECT_SOURCE_DIR}/src/ow_version.h @ONLY)
add_executable( owgw add_executable( owgw
build build
src/ow_version.h.in
src/framework/CountryCodes.h src/framework/CountryCodes.h
src/framework/KafkaTopics.h src/framework/KafkaTopics.h
src/framework/MicroService.h src/framework/MicroService.h
@@ -81,17 +96,15 @@ add_executable( owgw
src/RESTAPI/RESTAPI_capabilities_handler.cpp src/RESTAPI/RESTAPI_capabilities_handler.h src/RESTAPI/RESTAPI_capabilities_handler.cpp src/RESTAPI/RESTAPI_capabilities_handler.h
src/RESTAPI/RESTAPI_RPC.cpp src/RESTAPI/RESTAPI_RPC.h src/RESTAPI/RESTAPI_RPC.cpp src/RESTAPI/RESTAPI_RPC.h
src/RESTAPI/RESTAPI_deviceDashboardHandler.cpp src/RESTAPI/RESTAPI_deviceDashboardHandler.h src/RESTAPI/RESTAPI_deviceDashboardHandler.cpp src/RESTAPI/RESTAPI_deviceDashboardHandler.h
src/RESTAPI/RESTAPI_TelemetryWebSocket.cpp src/RESTAPI/RESTAPI_TelemetryWebSocket.h src/RESTAPI/RESTAPI_telemetryWebSocket.cpp src/RESTAPI/RESTAPI_telemetryWebSocket.h
src/RESTAPI/RESTAPI_webSocketServer.cpp src/RESTAPI/RESTAPI_webSocketServer.h src/RESTAPI/RESTAPI_webSocketServer.cpp src/RESTAPI/RESTAPI_webSocketServer.h
src/storage/storage_blacklist.cpp src/storage/storage_tables.cpp src/storage/storage_logs.cpp src/storage/storage_blacklist.cpp src/storage/storage_tables.cpp src/storage/storage_logs.cpp
src/storage/storage_command.cpp src/storage/storage_healthcheck.cpp src/storage/storage_statistics.cpp src/storage/storage_command.cpp src/storage/storage_healthcheck.cpp src/storage/storage_statistics.cpp
src/storage/storage_device.cpp src/storage/storage_capabilities.cpp src/storage/storage_defconfig.cpp src/storage/storage_device.cpp src/storage/storage_capabilities.cpp src/storage/storage_defconfig.cpp
src/storage/storage_tables.cpp src/storage/storage_tables.cpp
src/APIServers.cpp src/RESTAPI/RESTAPI_routers.cpp
src/Daemon.cpp src/Daemon.h src/Daemon.cpp src/Daemon.h
src/StateProcessor.cpp src/StateProcessor.h src/WS_Server.cpp src/WS_Server.h
src/storage/storage_lifetime_stats.cpp
src/WebSocketServer.cpp src/WebSocketServer.h
src/StorageService.cpp src/StorageService.h src/StorageService.cpp src/StorageService.h
src/DeviceRegistry.cpp src/DeviceRegistry.h src/DeviceRegistry.cpp src/DeviceRegistry.h
src/CommandManager.cpp src/CommandManager.h src/CommandManager.cpp src/CommandManager.h
@@ -103,8 +116,8 @@ add_executable( owgw
src/SerialNumberCache.cpp src/SerialNumberCache.h src/SerialNumberCache.cpp src/SerialNumberCache.h
src/TelemetryStream.cpp src/TelemetryStream.h src/TelemetryStream.cpp src/TelemetryStream.h
src/framework/ConfigurationValidator.cpp src/framework/ConfigurationValidator.h src/framework/ConfigurationValidator.cpp src/framework/ConfigurationValidator.h
src/ConfigurationCache.cpp src/ConfigurationCache.h src/ConfigurationCache.h
) src/CapabilitiesCache.h src/FindCountry.h src/rttys/RTTYS_server.cpp src/rttys/RTTYS_server.h src/rttys/RTTYS_device.cpp src/rttys/RTTYS_device.h src/rttys/RTTYS_ClientConnection.cpp src/rttys/RTTYS_ClientConnection.h src/rttys/RTTYS_WebServer.cpp src/rttys/RTTYS_WebServer.h src/RESTAPI/RESTAPI_device_helper.h src/SDKcalls.cpp src/SDKcalls.h src/StateUtils.cpp src/StateUtils.h src/WS_ReactorPool.h src/WS_Connection.h src/WS_Connection.cpp src/TelemetryClient.h src/TelemetryClient.cpp src/RESTAPI/RESTAPI_iptocountry_handler.cpp src/RESTAPI/RESTAPI_iptocountry_handler.h)
if(NOT SMALL_BUILD) if(NOT SMALL_BUILD)

View File

@@ -1,25 +1,15 @@
FROM alpine AS builder FROM alpine:3.15 AS build-base
RUN apk add --update --no-cache \ RUN apk add --update --no-cache \
openssl openssh \ make cmake g++ git \
ncurses-libs \ unixodbc-dev postgresql-dev mariadb-dev \
bash util-linux coreutils curl \ librdkafka-dev boost-dev openssl-dev \
make cmake gcc g++ libstdc++ libgcc git zlib-dev yaml-cpp-dev \ zlib-dev nlohmann-json
openssl-dev boost-dev unixodbc-dev postgresql-dev mariadb-dev \
apache2-utils yaml-dev apr-util-dev \
lua-dev librdkafka-dev \
nlohmann-json
FROM build-base AS poco-build
ADD https://api.github.com/repos/stephb9959/poco/git/refs/heads/master version.json
RUN git clone https://github.com/stephb9959/poco /poco RUN git clone https://github.com/stephb9959/poco /poco
RUN git clone https://github.com/stephb9959/cppkafka /cppkafka
RUN git clone https://github.com/pboettch/json-schema-validator /json-schema-validator
WORKDIR /cppkafka
RUN mkdir cmake-build
WORKDIR cmake-build
RUN cmake ..
RUN cmake --build . --config Release -j8
RUN cmake --build . --target install
WORKDIR /poco WORKDIR /poco
RUN mkdir cmake-build RUN mkdir cmake-build
@@ -28,6 +18,23 @@ RUN cmake ..
RUN cmake --build . --config Release -j8 RUN cmake --build . --config Release -j8
RUN cmake --build . --target install RUN cmake --build . --target install
FROM build-base AS cppkafka-build
ADD https://api.github.com/repos/stephb9959/cppkafka/git/refs/heads/master version.json
RUN git clone https://github.com/stephb9959/cppkafka /cppkafka
WORKDIR /cppkafka
RUN mkdir cmake-build
WORKDIR cmake-build
RUN cmake ..
RUN cmake --build . --config Release -j8
RUN cmake --build . --target install
FROM build-base AS json-schema-validator-build
ADD https://api.github.com/repos/pboettch/json-schema-validator/git/refs/heads/master version.json
RUN git clone https://github.com/pboettch/json-schema-validator /json-schema-validator
WORKDIR /json-schema-validator WORKDIR /json-schema-validator
RUN mkdir cmake-build RUN mkdir cmake-build
WORKDIR cmake-build WORKDIR cmake-build
@@ -35,9 +42,19 @@ RUN cmake ..
RUN make RUN make
RUN make install RUN make install
FROM build-base AS owgw-build
ADD CMakeLists.txt build /owgw/ ADD CMakeLists.txt build /owgw/
ADD cmake /owgw/cmake ADD cmake /owgw/cmake
ADD src /owgw/src ADD src /owgw/src
ADD .git /owgw/.git
COPY --from=poco-build /usr/local/include /usr/local/include
COPY --from=poco-build /usr/local/lib /usr/local/lib
COPY --from=cppkafka-build /usr/local/include /usr/local/include
COPY --from=cppkafka-build /usr/local/lib /usr/local/lib
COPY --from=json-schema-validator-build /usr/local/include /usr/local/include
COPY --from=json-schema-validator-build /usr/local/lib /usr/local/lib
WORKDIR /owgw WORKDIR /owgw
RUN mkdir cmake-build RUN mkdir cmake-build
@@ -45,7 +62,7 @@ WORKDIR /owgw/cmake-build
RUN cmake .. RUN cmake ..
RUN cmake --build . --config Release -j8 RUN cmake --build . --config Release -j8
FROM alpine FROM alpine:3.15
ENV OWGW_USER=owgw \ ENV OWGW_USER=owgw \
OWGW_ROOT=/owgw-data \ OWGW_ROOT=/owgw-data \
@@ -57,18 +74,22 @@ RUN addgroup -S "$OWGW_USER" && \
RUN mkdir /openwifi RUN mkdir /openwifi
RUN mkdir -p "$OWGW_ROOT" "$OWGW_CONFIG" && \ RUN mkdir -p "$OWGW_ROOT" "$OWGW_CONFIG" && \
chown "$OWGW_USER": "$OWGW_ROOT" "$OWGW_CONFIG" chown "$OWGW_USER": "$OWGW_ROOT" "$OWGW_CONFIG"
RUN apk add --update --no-cache librdkafka mariadb-connector-c libpq unixodbc su-exec gettext ca-certificates bash jq curl
COPY --from=builder /owgw/cmake-build/owgw /openwifi/owgw RUN apk add --update --no-cache librdkafka su-exec gettext ca-certificates bash jq curl \
COPY --from=builder /cppkafka/cmake-build/src/lib/* /lib/ mariadb-connector-c libpq unixodbc postgresql-client
COPY --from=builder /poco/cmake-build/lib/* /lib/
COPY readiness_check /readiness_check
COPY test_scripts/curl/cli /cli
COPY owgw.properties.tmpl / COPY owgw.properties.tmpl /
COPY docker-entrypoint.sh / COPY docker-entrypoint.sh /
COPY wait-for-postgres.sh /
RUN wget https://raw.githubusercontent.com/Telecominfraproject/wlan-cloud-ucentral-deploy/main/docker-compose/certs/restapi-ca.pem \ RUN wget https://raw.githubusercontent.com/Telecominfraproject/wlan-cloud-ucentral-deploy/main/docker-compose/certs/restapi-ca.pem \
-O /usr/local/share/ca-certificates/restapi-ca-selfsigned.pem -O /usr/local/share/ca-certificates/restapi-ca-selfsigned.pem
COPY readiness_check /readiness_check COPY --from=owgw-build /owgw/cmake-build/owgw /openwifi/owgw
COPY --from=cppkafka-build /cppkafka/cmake-build/src/lib /usr/local/lib/
COPY --from=poco-build /poco/cmake-build/lib /usr/local/lib
EXPOSE 15002 16002 16003 17002 16102 EXPOSE 15002 16002 16003 17002 16102

View File

@@ -609,6 +609,32 @@ The device should answer:
"id" : <same number> "id" : <same number>
} }
``` ```
#### Controller wants to ping the device
Controller sends this command when it tries to establish latency to the device.
```
{ "jsonrpc" : "2.0" ,
"method" : "ping" ,
"params" : {
"serial" : <serial number>
},
"id" : <some number>
}
```
The device should answer:
```
{ "jsonrpc" : "2.0" ,
"result" : {
"serial" : <serial number> ,
"uuid" : <uuid of the current active configuration>,
"deviceUTCTime" : <UTC Time on device in milliseconds>
},
"id" : <same number>
}
```
#### `rtty server` #### `rtty server`
More information about the [rtty server](https://github.com/zhaojh329/rtty) can be found here. More information about the [rtty server](https://github.com/zhaojh329/rtty) can be found here.

View File

@@ -28,8 +28,9 @@ These instructions have proven to work on Ubuntu 20.4.
``` ```
sudo apt install git cmake g++ libssl-dev libmariadb-dev sudo apt install git cmake g++ libssl-dev libmariadb-dev
sudo apt install libpq-dev libaprutil1-dev apache2-dev libboost-all-dev sudo apt install libpq-dev libaprutil1-dev apache2-dev libboost-all-dev
sudo apt install librdkafka-dev libmysqlclient-dev default-libmysqlclient-dev sudo apt install librdkafka-dev // default-libmysqlclient-dev
cd ~
git clone https://github.com/stephb9959/poco git clone https://github.com/stephb9959/poco
cd poco cd poco
mkdir cmake-build mkdir cmake-build
@@ -38,6 +39,7 @@ cmake ..
cmake --build . --config Release cmake --build . --config Release
sudo cmake --build . --target install sudo cmake --build . --target install
cd ~
git clone https://github.com/stephb9959/cppkafka git clone https://github.com/stephb9959/cppkafka
cd cppkafka cd cppkafka
mkdir cmake-build mkdir cmake-build
@@ -46,13 +48,33 @@ cmake ..
cmake --build . --config Release cmake --build . --config Release
sudo cmake --build . --target install sudo cmake --build . --target install
cd ~
git clone https://github.com/nlohmann/json.git
cd json
mkdir cmake-build
cd cmake-build
cmake ..
make -j
sudo make install
cd ~
git clone https://github.com/pboettch/json-schema-validator.git
cd json-schema-validator
mkdir cmake-build
cd cmake-build
cmake ..
make -j
sudo make install
cd ~ cd ~
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw
cd wlan-cloud-ucentralgw cd wlan-cloud-ucentralgw
mkdir cmake-build mkdir cmake-build
cd cmake-build cd cmake-build
cmake .. cmake ..
make make -j 8
``` ```
### Fedora ### Fedora

2
build
View File

@@ -1 +1 @@
33 171

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_eap101","model":"EdgeCore EAP101","network":{"lan":["eth1","eth2"],"wan":["eth0"]},"platform":"ap","switch":{"switch0":{"enable":false,"reset":false}},"wifi":{"platform/soc/c000000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"he_mac_capa":[13,-26104,4160],"he_phy_capa":[7168,19568,8072,-31807,260,44],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40","HE80","HE160","HE80+80"],"rx_ant":3,"tx_ant":3,"vht_capa":1939470770},"platform/soc/c000000.wifi+1":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462],"he_mac_capa":[13,-26104,4160],"he_phy_capa":[512,3184,8072,-31807,260,44],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40"],"rx_ant":3,"tx_ant":3,"vht_capa":1939437970}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_eap102","model":"Edgecore EAP102","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","switch":{"switch0":{"enable":false,"reset":false}},"wifi":{"platform/soc/c000000.wifi1":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"he_mac_capa":[13,-26088,4160],"he_phy_capa":[1024,19552,32648,-31781,412,12],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40","HE80"],"rx_ant":240,"tx_ant":240,"vht_capa":1939601842},"platform/soc/c000000.wifi1+1":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462],"he_mac_capa":[13,-26088,4160],"he_phy_capa":[512,19552,32648,-31807,412,12],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","HE20","HE40"],"rx_ant":3,"tx_ant":3,"vht_capa":1939437970}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_ecw5211","model":"Edgecore ECW5211","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_ecw5410","model":"Edgecore ECW5410","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","wifi":{"soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","VHT80+80","VHT160"],"rx_ant":15,"tx_ant":15,"vht_capa":865827322},"soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":15,"tx_ant":15,"vht_capa":865827250}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_spw2ac1200-lan-poe","model":"Edgecore SPW2AC1200","network":{"lan":["eth0"],"wan":["eth1"]},"platform":"ap","wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_spw2ac1200","model":"Edgecore SPW2AC1200","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986}}}

View File

@@ -0,0 +1 @@
{"compatible":"edgecore_ssw2ac2600","model":"Edgecore SSW2AC2600","network":{"lan":["eth1"],"wan":["eth0"]},"platform":"ap","wifi":{"soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","VHT80+80","VHT160"],"rx_ant":15,"tx_ant":15,"vht_capa":865827322},"soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":15,"tx_ant":15,"vht_capa":865827250}}}

View File

@@ -0,0 +1 @@
{"compatible":"linksys_ea6350-v4","model":"Linksys EA6350 v4","network":{"lan":["lan1","lan2","lan3","lan4"],"wan":["wan"]},"platform":"ap","wifi":{"1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":510,"htmode":["HT20","HT40"],"rx_ant":3,"tx_ant":3},"1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":511,"htmode":["HT20","HT40","VHT20","VHT40","VHT80","VHT80+80","VHT160"],"rx_ant":3,"tx_ant":3,"vht_capa":864027128}}}

View File

@@ -0,0 +1 @@
{"compatible":"linksys_ea8300","model":"Linksys EA8300 (Dallas)","network":{"lan":["eth0"],"wan":["eth1"]},"platform":"ap","switch":{"switch0":{"enable":true,"ports":[{"device":"eth0","need_tag":false,"num":0,"want_untag":true},{"num":1,"role":"lan"},{"num":2,"role":"lan"},{"num":3,"role":"lan"},{"num":4,"role":"lan"}],"reset":true,"roles":[{"device":"eth0","ports":"1 2 3 4 0","role":"lan"}]}},"wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64],"dfs_channels":[52,56,60,64],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"soc/40000000.pci/pci0000:00/0000:00:00.0/0000:01:00.0":{"band":["5G"],"channels":[100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"dfs_channels":[100,104,108,112,116,120,124,128,132,136,140,144],"frequencies":[5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865696178}}}

View File

@@ -0,0 +1 @@
{"compatible":"wallys_dr40x9","model":"Wallys DR40X9","network":{"lan":["eth0"],"wan":["eth1"]},"platform":"ap","wifi":{"platform/soc/a000000.wifi":{"band":["2G"],"channels":[1,2,3,4,5,6,7,8,9,10,11,12,13,14],"frequencies":[2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986},"platform/soc/a800000.wifi":{"band":["5G"],"channels":[36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165],"frequencies":[5180,5200,5220,5240,5260,5280,5300,5320,5500,5520,5540,5560,5580,5600,5620,5640,5660,5680,5700,5720,5745,5765,5785,5805,5825],"ht_capa":6639,"htmode":["HT20","HT40","VHT20","VHT40","VHT80"],"rx_ant":3,"tx_ant":3,"vht_capa":865687986}}}

View File

@@ -38,6 +38,11 @@ if [[ "$TEMPLATE_CONFIG" = 'true' && ! -f "$OWGW_CONFIG"/owgw.properties ]]; the
SYSTEM_URI_PRIVATE=${SYSTEM_URI_PRIVATE:-"https://localhost:17002"} \ SYSTEM_URI_PRIVATE=${SYSTEM_URI_PRIVATE:-"https://localhost:17002"} \
SYSTEM_URI_PUBLIC=${SYSTEM_URI_PUBLIC:-"https://localhost:16002"} \ SYSTEM_URI_PUBLIC=${SYSTEM_URI_PUBLIC:-"https://localhost:16002"} \
SYSTEM_URI_UI=${SYSTEM_URI_UI:-"http://localhost"} \ SYSTEM_URI_UI=${SYSTEM_URI_UI:-"http://localhost"} \
SIMULATORID=${SIMULATORID:-""} \
IPTOCOUNTRY_PROVIDER=${IPTOCOUNTRY_PROVIDER:-"ipinfo"} \
IPTOCOUNTRY_IPINFO_TOKEN=${IPTOCOUNTRY_IPINFO_TOKEN:-""} \
IPTOCOUNTRY_IPDATA_APIKEY=${IPTOCOUNTRY_IPDATA_APIKEY:-""} \
AUTOPROVISIONING_PROCESS=${AUTOPROVISIONING_PROCESS:-"prov,default"} \
RTTY_ENABLED=${RTTY_ENABLED:-"false"} \ RTTY_ENABLED=${RTTY_ENABLED:-"false"} \
RTTY_SERVER=${RTTY_SERVER:-"localhost"} \ RTTY_SERVER=${RTTY_SERVER:-"localhost"} \
RTTY_PORT=${RTTY_PORT:-"5912"} \ RTTY_PORT=${RTTY_PORT:-"5912"} \

View File

@@ -1,12 +1,12 @@
dependencies: dependencies:
- name: postgresql - name: postgresql
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 10.9.2 version: 10.9.2
- name: mysql - name: mysql
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 8.8.3 version: 8.8.3
- name: mariadb - name: mariadb
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 9.4.2 version: 9.4.2
digest: sha256:1fdae7cbea906e41dccd8618ff9e2c68d0c684724ae27c79a12bb6089968df5c digest: sha256:e9df5a5d8a0a193bfda33ea06060203aace01f0f7df9eda662a84185322c7ab5
generated: "2021-08-17T12:18:40.341427893+03:00" generated: "2022-06-03T15:38:31.063022252+03:00"

View File

@@ -5,14 +5,14 @@ name: owgw
version: 0.1.0 version: 0.1.0
dependencies: dependencies:
- name: postgresql - name: postgresql
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 10.9.2 version: 10.9.2
condition: postgresql.enabled condition: postgresql.enabled
- name: mysql - name: mysql
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 8.8.3 version: 8.8.3
condition: mysql.enabled condition: mysql.enabled
- name: mariadb - name: mariadb
repository: https://charts.bitnami.com/bitnami repository: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
version: 9.4.2 version: 9.4.2
condition: mariadb.enabled condition: mariadb.enabled

View File

@@ -30,3 +30,13 @@ Create chart name and version as used by the chart label.
{{- define "owgw.chart" -}} {{- define "owgw.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}} {{- end -}}
{{- define "owgw.ingress.apiVersion" -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
{{- print "networking.k8s.io/v1" -}}
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
{{- print "networking.k8s.io/v1beta1" -}}
{{- else -}}
{{- print "extensions/v1beta1" -}}
{{- end -}}
{{- end -}}

View File

@@ -13,6 +13,7 @@ spec:
replicas: {{ .Values.replicaCount }} replicas: {{ .Values.replicaCount }}
strategy: strategy:
type: {{ .Values.strategyType }} type: {{ .Values.strategyType }}
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: {{ include "owgw.name" . }} app.kubernetes.io/name: {{ include "owgw.name" . }}
@@ -24,6 +25,9 @@ spec:
metadata: metadata:
annotations: annotations:
checksum/config: {{ include "owgw.config" . | sha256sum }} checksum/config: {{ include "owgw.config" . | sha256sum }}
{{- if .Values.podSecurityPolicy.enabled }}
kubernetes.io/psp: {{ include "owgw.fullname" . }}-{{ .Release.Namespace }}-owgw-unsafe-sysctl
{{- end }}
{{- with .Values.podAnnotations }} {{- with .Values.podAnnotations }}
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
@@ -35,6 +39,16 @@ spec:
{{- end }} {{- end }}
spec: spec:
initContainers:
- name: wait-kafka
image: "{{ .Values.images.dockerize.repository }}:{{ .Values.images.dockerize.tag }}"
imagePullPolicy: {{ .Values.images.dockerize.pullPolicy }}
args:
- -wait
- tcp://{{ index .Values.configProperties "openwifi.kafka.brokerlist" }}
- -timeout
- 600s
containers: containers:
- name: owgw - name: owgw

View File

@@ -2,7 +2,7 @@
{{- range $ingress, $ingressValue := .Values.ingresses }} {{- range $ingress, $ingressValue := .Values.ingresses }}
{{- if $ingressValue.enabled }} {{- if $ingressValue.enabled }}
--- ---
apiVersion: extensions/v1beta1 apiVersion: {{ include "owgw.ingress.apiVersion" $root }}
kind: Ingress kind: Ingress
metadata: metadata:
name: {{ include "owgw.fullname" $root }}-{{ $ingress }} name: {{ include "owgw.fullname" $root }}-{{ $ingress }}
@@ -36,11 +36,25 @@ spec:
paths: paths:
{{- range $ingressValue.paths }} {{- range $ingressValue.paths }}
- path: {{ .path }} - path: {{ .path }}
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
pathType: {{ .pathType | default "ImplementationSpecific" }}
{{- end }}
backend: backend:
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ include "owgw.fullname" $root }}-{{ .serviceName }}
port:
{{- if kindIs "string" .servicePort }}
name: {{ .servicePort }}
{{- else }}
number: {{ .servicePort }}
{{- end }}
{{- else }}
serviceName: {{ include "owgw.fullname" $root }}-{{ .serviceName }} serviceName: {{ include "owgw.fullname" $root }}-{{ .serviceName }}
servicePort: {{ .servicePort }} servicePort: {{ .servicePort }}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- end }}
{{- end }} {{- end }}

28
helm/templates/psp.yaml Normal file
View File

@@ -0,0 +1,28 @@
{{- if .Values.podSecurityPolicy.enabled }}
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: {{ include "owgw.fullname" . }}-{{ .Release.Namespace }}-owgw-unsafe-sysctl
labels:
app.kubernetes.io/name: {{ include "owgw.name" . }}
helm.sh/chart: {{ include "owgw.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
allowedUnsafeSysctls:
{{- range $unsafeSysctl := .Values.securityContext.sysctls }}
- {{ $unsafeSysctl.name }}
{{- end }}
privileged: false
seLinux:
rule: RunAsAny
supplementalGroups:
rule: RunAsAny
runAsUser:
rule: RunAsAny
fsGroup:
rule: RunAsAny
volumes:
- '*'
{{- end }}

16
helm/templates/role.yaml Normal file
View File

@@ -0,0 +1,16 @@
{{- if .Values.podSecurityPolicy.enabled }}
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: {{ include "owgw.fullname" . }}-owgw-use-unsafe-sysctl
rules:
- apiGroups:
- policy
resources:
- podsecuritypolicies
verbs:
- use
resourceNames:
- {{ include "owgw.fullname" . }}-{{ .Release.Namespace }}-owgw-unsafe-sysctl
{{- end }}

View File

@@ -0,0 +1,15 @@
{{- if .Values.podSecurityPolicy.enabled }}
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: {{ include "owgw.fullname" . }}-owgw-use-unsafe-sysctl-to-default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: {{ include "owgw.fullname" . }}-owgw-use-unsafe-sysctl
subjects:
- kind: ServiceAccount
name: default
namespace: {{ .Release.Namespace }}
{{- end }}

View File

@@ -1,6 +1,7 @@
# System # System
replicaCount: 1 replicaCount: 1
strategyType: Recreate strategyType: Recreate
revisionHistoryLimit: 2
nameOverride: "" nameOverride: ""
fullnameOverride: "" fullnameOverride: ""
@@ -8,16 +9,20 @@ fullnameOverride: ""
images: images:
owgw: owgw:
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw
tag: master tag: v2.5.3
pullPolicy: Always pullPolicy: Always
# regcred: # regcred:
# registry: tip-tip-wlan-cloud-ucentral.jfrog.io # registry: tip-tip-wlan-cloud-ucentral.jfrog.io
# username: username # username: username
# password: password # password: password
dockerize:
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/dockerize
tag: 0.16.0
pullPolicy: IfNotPresent
services: services:
owgw: owgw:
type: LoadBalancer type: ClusterIP
ports: ports:
websocket: websocket:
servicePort: 15002 servicePort: 15002
@@ -46,7 +51,6 @@ checks:
exec: exec:
command: command:
- /readiness_check - /readiness_check
failureThreshold: 1
ingresses: ingresses:
restapi: restapi:
@@ -58,6 +62,7 @@ ingresses:
- restapi.chart-example.local - restapi.chart-example.local
paths: paths:
- path: / - path: /
pathType: ImplementationSpecific
serviceName: owgw serviceName: owgw
servicePort: restapi servicePort: restapi
fileuploader: fileuploader:
@@ -69,6 +74,7 @@ ingresses:
- fileuploader.chart-example.local - fileuploader.chart-example.local
paths: paths:
- path: / - path: /
pathType: ImplementationSpecific
serviceName: owgw serviceName: owgw
servicePort: fileuploader servicePort: fileuploader
@@ -112,6 +118,17 @@ resources: {}
securityContext: securityContext:
fsGroup: 101 fsGroup: 101
# Usage of unsafe sysctls requires multiple things:
# - allow these unsafe sysctls on kubelet level (by adding --allowed-unsafe-sysctls flag)
# - enabling addition of PodSecurityContext setting podSecurityPolicy.enabled to "true" below
# - uncommenting parameters below
#sysctls:
#- name: net.ipv4.tcp_keepalive_intvl
# value: "5"
#- name: net.ipv4.tcp_keepalive_probes
# value: "2"
#- name: net.ipv4.tcp_keepalive_time
# value: "45"
nodeSelector: {} nodeSelector: {}
@@ -121,6 +138,9 @@ affinity: {}
podAnnotations: {} podAnnotations: {}
podSecurityPolicy:
enabled: false
persistence: persistence:
enabled: true enabled: true
# storageClassName: "-" # storageClassName: "-"
@@ -240,22 +260,20 @@ configProperties:
openwifi.system.uri.public: https://localhost:16002 openwifi.system.uri.public: https://localhost:16002
openwifi.system.commandchannel: /tmp/app_owgw openwifi.system.commandchannel: /tmp/app_owgw
# Logging # Logging
logging.formatters.f1.class: PatternFormatter logging.type: console
logging.formatters.f1.pattern: "%Y-%m-%d %H:%M:%S %s: [%p] %t" logging.path: $OWGW_ROOT/logs
logging.formatters.f1.times: UTC logging.level: debug
logging.channels.c1.class: ConsoleChannel # Archiving
logging.channels.c1.formatter: f1 archiver.enabled: "true"
logging.channels.c2.class: FileChannel archiver.schedule: 03:00
logging.channels.c2.path: /tmp/log_owgw archiver.db.0.name: healthchecks
logging.channels.c2.formatter.class: PatternFormatter archiver.db.0.keep: 7
logging.channels.c2.formatter.pattern: "%Y-%m-%d %H:%M:%S %s: [%p] %t" archiver.db.1.name: statistics
logging.channels.c2.rotation: "20 M" archiver.db.1.keep: 7
logging.channels.c2.archive: timestamp archiver.db.2.name: devicelogs
logging.channels.c2.purgeCount: 20 archiver.db.2.keep: 7
logging.channels.c3.class: ConsoleChannel archiver.db.3.name: commandlist
logging.channels.c3.pattern: "%s: [%p] %t" archiver.db.3.keep: 7
logging.loggers.root.channel: c1
logging.loggers.root.level: debug
# -> Secret part # -> Secret part
# Websocket # Websocket

View File

@@ -1,158 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<g>
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6c-0.8,0-1.4,0.6-1.4,1.4
c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z M66.5,164.2
c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z M88,163.5
c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4c0-0.5-0.3-0.9-0.9-0.9
h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z M101.6,163.4
c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1C103.6,166.3,102.8,165.4,102.8,164.2
z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6c-0.9,0-1.7,0.7-1.7,1.7
c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2l0.2,0
c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9c3.5,0.3,6.6-2.3,6.9-5.8
c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2c-1.1,1.3-1.6,2.9-1.5,4.6
c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6c-1.1,0.6-2.4,1-3.8,1
s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6c-0.8,0-1.4,0.3-1.8,0.8
c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#414141;}
.st1{fill:#FFFFFF;}
.st2{fill:#FED206;}
.st3{fill:#EB6F53;}
.st4{fill:#3BA9B6;}
</style>
<g>
<g>
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#414141;}
.st2{fill:#D3D3D3;}
.st3{fill:#808386;}
.st4{fill:#BCBEC0;}
</style>
<g>
<g>
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1,171 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#D3D3D3;}
.st2{fill:#808386;}
.st3{fill:#BCBEC0;}
</style>
<g>
<g>
<path d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2c10.8,0,19.5,8.7,19.5,19.5v143.9
C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<g>
<path class="st0" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st0" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st0" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st0" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st0" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st0" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st0" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st0" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st0" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st0" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st0" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st0" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st0" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st0" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st0" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st0" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st0" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st0" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st0" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st0" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st0" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st0" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st0" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
</g>
<g>
<g>
<path class="st0" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
</g>
<g>
<g>
<g>
<path class="st1" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st2" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<g>
<path class="st0" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"
/>
<path class="st0" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st0" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st0" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st0" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st0" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st0" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st0" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.2 KiB

View File

@@ -1,161 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<g>
<path d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2c10.8,0,19.5,8.7,19.5,19.5v143.9
C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path class="st0" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st0" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st0" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st0" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st0" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st0" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st0" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st0" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st0" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st0" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st0" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st0" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st0" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st0" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st0" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st0" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st0" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st0" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st0" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st0" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st0" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st0" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st0" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path class="st0" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path class="st0" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st0" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st0" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st0" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path class="st0" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st0" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st0" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st0" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st0" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st0" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st0" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -1,130 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 251.2 114.2" style="enable-background:new 0 0 251.2 114.2;" xml:space="preserve">
<g>
<path d="M219.6,43.3C219.5,43.3,219.5,43.3,219.6,43.3c-1.3,0-2.2-1-2.2-2.2c0-0.2,0-0.4,0-0.6c0-11.9-9.7-21.6-21.6-21.6
c-0.2,0-0.4,0-0.6,0c-1.2,0-2.2-0.9-2.2-2.1c0-1.2,0.9-2.2,2.1-2.2c0.2,0,0.5,0,0.7,0c14.3,0,25.9,11.6,25.9,25.9
c0,0.2,0,0.5,0,0.7C221.7,42.4,220.7,43.3,219.6,43.3z"/>
<path d="M212.1,43.3C212,43.3,212,43.3,212.1,43.3c-1.3-0.1-2.2-1.1-2.2-2.3c0-0.2,0-0.4,0-0.6c0-7.7-6.3-14.1-14.1-14.1
c-0.2,0-0.4,0-0.6,0c-1.2,0.1-2.2-0.9-2.3-2.1c0-1.2,0.9-2.2,2.1-2.3c0.3,0,0.5,0,0.8,0c10.2,0,18.4,8.3,18.4,18.4
c0,0.2,0,0.5,0,0.8C214.2,42.4,213.2,43.3,212.1,43.3z"/>
<path d="M204.3,43.3c-0.1,0-0.1,0-0.2,0c-1.2-0.1-2.1-1.1-2-2.3c0-0.2,0-0.4,0-0.5c0-3.5-2.8-6.3-6.3-6.3c-0.1,0-0.3,0-0.5,0
c-1.2,0.1-2.3-0.8-2.3-2c-0.1-1.2,0.8-2.3,2-2.3c0.3,0,0.6,0,0.9,0c5.9,0,10.7,4.8,10.7,10.7c0,0.3,0,0.5,0,0.9
C206.4,42.4,205.4,43.3,204.3,43.3z"/>
<g>
<g>
<g>
<path d="M61.9,89.9v-4.7h-1.7v-0.9h4.4v0.9h-1.7v4.7H61.9z"/>
</g>
<g>
<path d="M65.6,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H65.6z"/>
</g>
<g>
<path d="M70.7,89.9v-5.6h1V89h2.5v0.9H70.7z"/>
</g>
<g>
<path d="M74.9,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H74.9z"/>
</g>
<g>
<path d="M79.8,87.1c0-1.7,1.3-2.9,2.9-2.9c1.1,0,1.8,0.6,2.2,1.3l-0.8,0.4c-0.3-0.5-0.8-0.8-1.4-0.8c-1.1,0-1.9,0.8-1.9,2
c0,1.2,0.8,2,1.9,2c0.6,0,1.1-0.4,1.4-0.8l0.8,0.4c-0.4,0.7-1.1,1.3-2.2,1.3C81.1,90,79.8,88.8,79.8,87.1z"/>
</g>
<g>
<path d="M85.5,87.1c0-1.7,1.2-2.9,2.9-2.9c1.7,0,2.9,1.2,2.9,2.9S90,90,88.3,90C86.7,90,85.5,88.8,85.5,87.1z M90.2,87.1
c0-1.2-0.7-2-1.9-2c-1.1,0-1.9,0.9-1.9,2c0,1.1,0.7,2,1.9,2C89.5,89.1,90.2,88.3,90.2,87.1z"/>
</g>
<g>
<path d="M96.9,89.9v-4.3l-1.7,4.3h-0.4l-1.7-4.3v4.3h-1v-5.6h1.4l1.5,3.8l1.5-3.8h1.4v5.6H96.9z"/>
</g>
<g>
<path d="M103,89.9v-5.6h1v5.6H103z"/>
</g>
<g>
<path d="M109.7,89.9l-2.9-4v4h-1v-5.6h1l2.9,3.9v-3.9h1v5.6H109.7z"/>
</g>
<g>
<path d="M112.4,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8v2.4H112.4z"/>
</g>
<g>
<path d="M120.3,89.9l-1.2-2.1h-1v2.1h-1v-5.6h2.5c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.5-1.3,1.6l1.4,2.2H120.3z M120.4,86.1
c0-0.5-0.4-0.9-1-0.9h-1.4V87h1.4C120,87,120.4,86.6,120.4,86.1z"/>
</g>
<g>
<path d="M126.6,89.9l-0.4-1.1h-2.6l-0.4,1.1h-1.1l2.2-5.6h1.2l2.2,5.6H126.6z M124.9,85.3l-1,2.7h2L124.9,85.3z"/>
</g>
<g>
<path d="M131.4,89.9v-5.6h2.1c1.1,0,1.7,0.8,1.7,1.6c0,0.9-0.6,1.6-1.7,1.6h-1.6v2.3H131.4z M134.7,86c0-0.7-0.5-1.2-1.2-1.2
h-1.6v2.4h1.6C134.2,87.2,134.7,86.6,134.7,86z"/>
</g>
<g>
<path d="M139.4,89.9l-1.6-2.3h-1.2v2.3h-0.5v-5.6h2.1c1,0,1.7,0.6,1.7,1.6c0,1-0.7,1.6-1.6,1.6l1.6,2.3H139.4z M139.4,86
c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C138.9,87.2,139.4,86.7,139.4,86z"/>
</g>
<g>
<path d="M141.2,87.1c0-1.6,1.1-2.9,2.7-2.9c1.6,0,2.7,1.3,2.7,2.9c0,1.6-1.1,2.9-2.7,2.9C142.3,90,141.2,88.8,141.2,87.1z
M146.1,87.1c0-1.4-0.9-2.5-2.2-2.5c-1.4,0-2.2,1-2.2,2.5c0,1.4,0.9,2.5,2.2,2.5C145.2,89.6,146.1,88.5,146.1,87.1z"/>
</g>
<g>
<path d="M147,89.3l0.3-0.4c0.3,0.3,0.6,0.6,1.1,0.6c0.8,0,1.2-0.5,1.2-1.3v-4h0.5v4c0,1.2-0.8,1.7-1.7,1.7
C147.9,90,147.4,89.8,147,89.3z"/>
</g>
<g>
<path d="M151.8,89.9v-5.6h3.5v0.4h-3.1v2.1h3v0.4h-3v2.2h3.1v0.4H151.8z"/>
</g>
<g>
<path d="M156.3,87.1c0-1.7,1.3-2.9,2.8-2.9c0.9,0,1.6,0.4,2,1l-0.4,0.3c-0.4-0.5-1-0.8-1.6-0.8c-1.3,0-2.3,1-2.3,2.5
c0,1.4,1,2.5,2.3,2.5c0.7,0,1.3-0.3,1.6-0.8l0.4,0.3c-0.5,0.6-1.2,1-2,1C157.5,90,156.3,88.8,156.3,87.1z"/>
</g>
<g>
<path d="M163.5,89.9v-5.2h-1.8v-0.4h4.1v0.4H164v5.2H163.5z"/>
</g>
</g>
<g>
<polygon points="33.7,86.5 41.2,79 48.6,86.5 49.8,86.5 41.2,77.9 32.6,86.5 "/>
<polygon points="48.6,87.8 41.2,95.2 33.7,87.8 32.6,87.8 41.2,96.4 49.8,87.8 "/>
<polygon points="40.3,86.5 47.8,79 55.3,86.5 56.4,86.5 47.8,77.9 39.2,86.5 "/>
<polygon points="55.3,87.8 47.8,95.2 40.3,87.8 39.2,87.8 47.8,96.4 56.4,87.8 "/>
</g>
</g>
</g>
<g>
<path d="M51.2,41.3c2,1.1,3.6,2.6,4.7,4.5c1.1,1.9,1.7,4,1.7,6.4c0,2.3-0.6,4.5-1.7,6.4c-1.1,1.9-2.7,3.4-4.7,4.6
c-2,1.1-4.2,1.7-6.6,1.7c-2.4,0-4.6-0.6-6.6-1.7c-2-1.1-3.6-2.6-4.7-4.6c-1.1-1.9-1.7-4.1-1.7-6.4c0-2.3,0.6-4.5,1.7-6.4
c1.1-1.9,2.7-3.4,4.7-4.5c2-1.1,4.2-1.6,6.6-1.6C47,39.6,49.2,40.2,51.2,41.3z M40.5,44.9c-1.3,0.7-2.3,1.7-3,3
c-0.7,1.3-1.1,2.7-1.1,4.2s0.4,3,1.1,4.2c0.8,1.3,1.8,2.3,3,3c1.3,0.7,2.7,1.1,4.1,1.1c1.5,0,2.8-0.4,4.1-1.1c1.3-0.7,2.3-1.8,3-3
c0.7-1.3,1.1-2.7,1.1-4.2s-0.4-2.9-1.1-4.2c-0.7-1.3-1.7-2.3-3-3c-1.3-0.7-2.6-1.1-4.1-1.1C43.2,43.8,41.8,44.2,40.5,44.9z"/>
<path d="M76.9,46.8c1.3,0.8,2.4,1.9,3.1,3.4c0.7,1.4,1.1,3.1,1.1,5c0,1.9-0.4,3.5-1.1,4.9c-0.7,1.4-1.8,2.5-3.1,3.3
c-1.3,0.8-2.9,1.2-4.6,1.2c-1.4,0-2.6-0.3-3.7-0.8c-1.1-0.5-2-1.3-2.7-2.4v9.8h-4.6V45.7H66v3.1c0.7-1.1,1.5-1.8,2.6-2.4
c1.1-0.5,2.3-0.8,3.7-0.8C74,45.6,75.6,46,76.9,46.8z M75.1,59.1c1-1.1,1.5-2.4,1.5-4.1c0-1.7-0.5-3-1.5-4.1
c-1-1.1-2.2-1.6-3.8-1.6c-1.6,0-2.8,0.5-3.8,1.6c-1,1-1.5,2.4-1.5,4.1c0,1.7,0.5,3,1.5,4.1c1,1.1,2.3,1.6,3.8,1.6
C72.8,60.7,74.1,60.2,75.1,59.1z"/>
<path d="M99.3,48.1c1.5,1.7,2.3,4.1,2.3,7.2c0,0.6,0,1.1,0,1.4H87.7c0.3,1.3,0.9,2.4,1.9,3.1c0.9,0.8,2.1,1.1,3.5,1.1
c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.6l2.5,2.6c-0.9,1-2.1,1.8-3.4,2.4c-1.3,0.6-2.8,0.8-4.5,0.8c-1.9,0-3.6-0.4-5.1-1.2
c-1.5-0.8-2.6-1.9-3.4-3.3c-0.8-1.4-1.2-3.1-1.2-5c0-1.9,0.4-3.5,1.2-5c0.8-1.4,1.9-2.6,3.4-3.4c1.4-0.8,3.1-1.2,4.9-1.2
C95.5,45.6,97.8,46.4,99.3,48.1z M97.4,53.6c0-1.4-0.5-2.5-1.4-3.3c-0.9-0.8-2-1.2-3.4-1.2c-1.3,0-2.4,0.4-3.3,1.2
c-0.9,0.8-1.5,1.9-1.7,3.3H97.4z"/>
<path d="M121.5,47.5c1.2,1.3,1.9,3.1,1.9,5.3v11.7h-4.6V54.1c0-1.3-0.4-2.3-1.1-3.1c-0.7-0.8-1.8-1.1-3-1.1c-1.5,0-2.7,0.5-3.6,1.5
s-1.3,2.3-1.3,3.8v9.2h-4.5V45.7h4.5v3.5c1.3-2.4,3.5-3.6,6.7-3.7C118.5,45.5,120.2,46.2,121.5,47.5z"/>
<path d="M156.5,39.9h4.9l-8.3,24.5h-4.9l-5.6-18.6l-5.7,18.6h-4.8l-8.3-24.5h5l5.8,19.4l5.7-19.4h4.6l5.8,19.5L156.5,39.9z"/>
<path d="M168,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C166.9,37.7,167.6,37.9,168,38.4z M164,45.7h4.5v18.7H164
V45.7z"/>
<path d="M174,39.9h16.9l0,4.1h-12.2v6.6h11.1v4.1h-11.1v9.7H174V39.9z"/>
<path d="M197.9,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C196.8,37.7,197.4,37.9,197.9,38.4z M193.8,45.7h4.5v18.7
h-4.5V45.7z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -1,140 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 251.2 114.2" style="enable-background:new 0 0 251.2 114.2;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FED206;}
.st1{fill:#EB6F53;}
.st2{fill:#3BA9B6;}
.st3{fill:#414141;}
</style>
<g>
<path class="st0" d="M219.6,43.3C219.5,43.3,219.5,43.3,219.6,43.3c-1.3,0-2.2-1-2.2-2.2c0-0.2,0-0.4,0-0.6
c0-11.9-9.7-21.6-21.6-21.6c-0.2,0-0.4,0-0.6,0c-1.2,0-2.2-0.9-2.2-2.1c0-1.2,0.9-2.2,2.1-2.2c0.2,0,0.5,0,0.7,0
c14.3,0,25.9,11.6,25.9,25.9c0,0.2,0,0.5,0,0.7C221.7,42.4,220.7,43.3,219.6,43.3z"/>
<path class="st1" d="M212.1,43.3C212,43.3,212,43.3,212.1,43.3c-1.3-0.1-2.2-1.1-2.2-2.3c0-0.2,0-0.4,0-0.6
c0-7.7-6.3-14.1-14.1-14.1c-0.2,0-0.4,0-0.6,0c-1.2,0.1-2.2-0.9-2.3-2.1c0-1.2,0.9-2.2,2.1-2.3c0.3,0,0.5,0,0.8,0
c10.2,0,18.4,8.3,18.4,18.4c0,0.2,0,0.5,0,0.8C214.2,42.4,213.2,43.3,212.1,43.3z"/>
<path class="st2" d="M204.3,43.3c-0.1,0-0.1,0-0.2,0c-1.2-0.1-2.1-1.1-2-2.3c0-0.2,0-0.4,0-0.5c0-3.5-2.8-6.3-6.3-6.3
c-0.1,0-0.3,0-0.5,0c-1.2,0.1-2.3-0.8-2.3-2c-0.1-1.2,0.8-2.3,2-2.3c0.3,0,0.6,0,0.9,0c5.9,0,10.7,4.8,10.7,10.7c0,0.3,0,0.5,0,0.9
C206.4,42.4,205.4,43.3,204.3,43.3z"/>
<g>
<g>
<g>
<path class="st3" d="M61.9,89.9v-4.7h-1.7v-0.9h4.4v0.9h-1.7v4.7H61.9z"/>
</g>
<g>
<path class="st3" d="M65.6,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H65.6z"/>
</g>
<g>
<path class="st3" d="M70.7,89.9v-5.6h1V89h2.5v0.9H70.7z"/>
</g>
<g>
<path class="st3" d="M74.9,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H74.9z"/>
</g>
<g>
<path class="st3" d="M79.8,87.1c0-1.7,1.3-2.9,2.9-2.9c1.1,0,1.8,0.6,2.2,1.3l-0.8,0.4c-0.3-0.5-0.8-0.8-1.4-0.8
c-1.1,0-1.9,0.8-1.9,2c0,1.2,0.8,2,1.9,2c0.6,0,1.1-0.4,1.4-0.8l0.8,0.4c-0.4,0.7-1.1,1.3-2.2,1.3C81.1,90,79.8,88.8,79.8,87.1z
"/>
</g>
<g>
<path class="st3" d="M85.5,87.1c0-1.7,1.2-2.9,2.9-2.9c1.7,0,2.9,1.2,2.9,2.9S90,90,88.3,90C86.7,90,85.5,88.8,85.5,87.1z
M90.2,87.1c0-1.2-0.7-2-1.9-2c-1.1,0-1.9,0.9-1.9,2c0,1.1,0.7,2,1.9,2C89.5,89.1,90.2,88.3,90.2,87.1z"/>
</g>
<g>
<path class="st3" d="M96.9,89.9v-4.3l-1.7,4.3h-0.4l-1.7-4.3v4.3h-1v-5.6h1.4l1.5,3.8l1.5-3.8h1.4v5.6H96.9z"/>
</g>
<g>
<path class="st3" d="M103,89.9v-5.6h1v5.6H103z"/>
</g>
<g>
<path class="st3" d="M109.7,89.9l-2.9-4v4h-1v-5.6h1l2.9,3.9v-3.9h1v5.6H109.7z"/>
</g>
<g>
<path class="st3" d="M112.4,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8v2.4H112.4z"/>
</g>
<g>
<path class="st3" d="M120.3,89.9l-1.2-2.1h-1v2.1h-1v-5.6h2.5c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.5-1.3,1.6l1.4,2.2H120.3z
M120.4,86.1c0-0.5-0.4-0.9-1-0.9h-1.4V87h1.4C120,87,120.4,86.6,120.4,86.1z"/>
</g>
<g>
<path class="st3" d="M126.6,89.9l-0.4-1.1h-2.6l-0.4,1.1h-1.1l2.2-5.6h1.2l2.2,5.6H126.6z M124.9,85.3l-1,2.7h2L124.9,85.3z"/>
</g>
<g>
<path class="st3" d="M131.4,89.9v-5.6h2.1c1.1,0,1.7,0.8,1.7,1.6c0,0.9-0.6,1.6-1.7,1.6h-1.6v2.3H131.4z M134.7,86
c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C134.2,87.2,134.7,86.6,134.7,86z"/>
</g>
<g>
<path class="st3" d="M139.4,89.9l-1.6-2.3h-1.2v2.3h-0.5v-5.6h2.1c1,0,1.7,0.6,1.7,1.6c0,1-0.7,1.6-1.6,1.6l1.6,2.3H139.4z
M139.4,86c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C138.9,87.2,139.4,86.7,139.4,86z"/>
</g>
<g>
<path class="st3" d="M141.2,87.1c0-1.6,1.1-2.9,2.7-2.9c1.6,0,2.7,1.3,2.7,2.9c0,1.6-1.1,2.9-2.7,2.9
C142.3,90,141.2,88.8,141.2,87.1z M146.1,87.1c0-1.4-0.9-2.5-2.2-2.5c-1.4,0-2.2,1-2.2,2.5c0,1.4,0.9,2.5,2.2,2.5
C145.2,89.6,146.1,88.5,146.1,87.1z"/>
</g>
<g>
<path class="st3" d="M147,89.3l0.3-0.4c0.3,0.3,0.6,0.6,1.1,0.6c0.8,0,1.2-0.5,1.2-1.3v-4h0.5v4c0,1.2-0.8,1.7-1.7,1.7
C147.9,90,147.4,89.8,147,89.3z"/>
</g>
<g>
<path class="st3" d="M151.8,89.9v-5.6h3.5v0.4h-3.1v2.1h3v0.4h-3v2.2h3.1v0.4H151.8z"/>
</g>
<g>
<path class="st3" d="M156.3,87.1c0-1.7,1.3-2.9,2.8-2.9c0.9,0,1.6,0.4,2,1l-0.4,0.3c-0.4-0.5-1-0.8-1.6-0.8
c-1.3,0-2.3,1-2.3,2.5c0,1.4,1,2.5,2.3,2.5c0.7,0,1.3-0.3,1.6-0.8l0.4,0.3c-0.5,0.6-1.2,1-2,1C157.5,90,156.3,88.8,156.3,87.1z"
/>
</g>
<g>
<path class="st3" d="M163.5,89.9v-5.2h-1.8v-0.4h4.1v0.4H164v5.2H163.5z"/>
</g>
</g>
<g>
<polygon class="st3" points="33.7,86.5 41.2,79 48.6,86.5 49.8,86.5 41.2,77.9 32.6,86.5 "/>
<polygon class="st3" points="48.6,87.8 41.2,95.2 33.7,87.8 32.6,87.8 41.2,96.4 49.8,87.8 "/>
<polygon class="st3" points="40.3,86.5 47.8,79 55.3,86.5 56.4,86.5 47.8,77.9 39.2,86.5 "/>
<polygon class="st3" points="55.3,87.8 47.8,95.2 40.3,87.8 39.2,87.8 47.8,96.4 56.4,87.8 "/>
</g>
</g>
</g>
<g>
<path class="st3" d="M51.2,41.3c2,1.1,3.6,2.6,4.7,4.5c1.1,1.9,1.7,4,1.7,6.4c0,2.3-0.6,4.5-1.7,6.4c-1.1,1.9-2.7,3.4-4.7,4.6
c-2,1.1-4.2,1.7-6.6,1.7c-2.4,0-4.6-0.6-6.6-1.7c-2-1.1-3.6-2.6-4.7-4.6c-1.1-1.9-1.7-4.1-1.7-6.4c0-2.3,0.6-4.5,1.7-6.4
c1.1-1.9,2.7-3.4,4.7-4.5c2-1.1,4.2-1.6,6.6-1.6C47,39.6,49.2,40.2,51.2,41.3z M40.5,44.9c-1.3,0.7-2.3,1.7-3,3
c-0.7,1.3-1.1,2.7-1.1,4.2s0.4,3,1.1,4.2c0.8,1.3,1.8,2.3,3,3c1.3,0.7,2.7,1.1,4.1,1.1c1.5,0,2.8-0.4,4.1-1.1c1.3-0.7,2.3-1.8,3-3
c0.7-1.3,1.1-2.7,1.1-4.2s-0.4-2.9-1.1-4.2c-0.7-1.3-1.7-2.3-3-3c-1.3-0.7-2.6-1.1-4.1-1.1C43.2,43.8,41.8,44.2,40.5,44.9z"/>
<path class="st3" d="M76.9,46.8c1.3,0.8,2.4,1.9,3.1,3.4c0.7,1.4,1.1,3.1,1.1,5c0,1.9-0.4,3.5-1.1,4.9c-0.7,1.4-1.8,2.5-3.1,3.3
c-1.3,0.8-2.9,1.2-4.6,1.2c-1.4,0-2.6-0.3-3.7-0.8c-1.1-0.5-2-1.3-2.7-2.4v9.8h-4.6V45.7H66v3.1c0.7-1.1,1.5-1.8,2.6-2.4
c1.1-0.5,2.3-0.8,3.7-0.8C74,45.6,75.6,46,76.9,46.8z M75.1,59.1c1-1.1,1.5-2.4,1.5-4.1c0-1.7-0.5-3-1.5-4.1
c-1-1.1-2.2-1.6-3.8-1.6c-1.6,0-2.8,0.5-3.8,1.6c-1,1-1.5,2.4-1.5,4.1c0,1.7,0.5,3,1.5,4.1c1,1.1,2.3,1.6,3.8,1.6
C72.8,60.7,74.1,60.2,75.1,59.1z"/>
<path class="st3" d="M99.3,48.1c1.5,1.7,2.3,4.1,2.3,7.2c0,0.6,0,1.1,0,1.4H87.7c0.3,1.3,0.9,2.4,1.9,3.1c0.9,0.8,2.1,1.1,3.5,1.1
c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.6l2.5,2.6c-0.9,1-2.1,1.8-3.4,2.4c-1.3,0.6-2.8,0.8-4.5,0.8c-1.9,0-3.6-0.4-5.1-1.2
c-1.5-0.8-2.6-1.9-3.4-3.3c-0.8-1.4-1.2-3.1-1.2-5c0-1.9,0.4-3.5,1.2-5c0.8-1.4,1.9-2.6,3.4-3.4c1.4-0.8,3.1-1.2,4.9-1.2
C95.5,45.6,97.8,46.4,99.3,48.1z M97.4,53.6c0-1.4-0.5-2.5-1.4-3.3c-0.9-0.8-2-1.2-3.4-1.2c-1.3,0-2.4,0.4-3.3,1.2
c-0.9,0.8-1.5,1.9-1.7,3.3H97.4z"/>
<path class="st3" d="M121.5,47.5c1.2,1.3,1.9,3.1,1.9,5.3v11.7h-4.6V54.1c0-1.3-0.4-2.3-1.1-3.1c-0.7-0.8-1.8-1.1-3-1.1
c-1.5,0-2.7,0.5-3.6,1.5s-1.3,2.3-1.3,3.8v9.2h-4.5V45.7h4.5v3.5c1.3-2.4,3.5-3.6,6.7-3.7C118.5,45.5,120.2,46.2,121.5,47.5z"/>
<path class="st3" d="M156.5,39.9h4.9l-8.3,24.5h-4.9l-5.6-18.6l-5.7,18.6h-4.8l-8.3-24.5h5l5.8,19.4l5.7-19.4h4.6l5.8,19.5
L156.5,39.9z"/>
<path class="st3" d="M168,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C166.9,37.7,167.6,37.9,168,38.4z M164,45.7h4.5v18.7H164
V45.7z"/>
<path class="st3" d="M174,39.9h16.9l0,4.1h-12.2v6.6h11.1v4.1h-11.1v9.7H174V39.9z"/>
<path class="st3" d="M197.9,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C196.8,37.7,197.4,37.9,197.9,38.4z M193.8,45.7h4.5v18.7
h-4.5V45.7z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -1,137 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 251.2 114.2" style="enable-background:new 0 0 251.2 114.2;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M219.6,43.3C219.5,43.3,219.5,43.3,219.6,43.3c-1.3,0-2.2-1-2.2-2.2c0-0.2,0-0.4,0-0.6
c0-11.9-9.7-21.6-21.6-21.6c-0.2,0-0.4,0-0.6,0c-1.2,0-2.2-0.9-2.2-2.1c0-1.2,0.9-2.2,2.1-2.2c0.2,0,0.5,0,0.7,0
c14.3,0,25.9,11.6,25.9,25.9c0,0.2,0,0.5,0,0.7C221.7,42.4,220.7,43.3,219.6,43.3z"/>
<path class="st0" d="M212.1,43.3C212,43.3,212,43.3,212.1,43.3c-1.3-0.1-2.2-1.1-2.2-2.3c0-0.2,0-0.4,0-0.6
c0-7.7-6.3-14.1-14.1-14.1c-0.2,0-0.4,0-0.6,0c-1.2,0.1-2.2-0.9-2.3-2.1c0-1.2,0.9-2.2,2.1-2.3c0.3,0,0.5,0,0.8,0
c10.2,0,18.4,8.3,18.4,18.4c0,0.2,0,0.5,0,0.8C214.2,42.4,213.2,43.3,212.1,43.3z"/>
<path class="st0" d="M204.3,43.3c-0.1,0-0.1,0-0.2,0c-1.2-0.1-2.1-1.1-2-2.3c0-0.2,0-0.4,0-0.5c0-3.5-2.8-6.3-6.3-6.3
c-0.1,0-0.3,0-0.5,0c-1.2,0.1-2.3-0.8-2.3-2c-0.1-1.2,0.8-2.3,2-2.3c0.3,0,0.6,0,0.9,0c5.9,0,10.7,4.8,10.7,10.7c0,0.3,0,0.5,0,0.9
C206.4,42.4,205.4,43.3,204.3,43.3z"/>
<g>
<g>
<g>
<path class="st0" d="M61.9,89.9v-4.7h-1.7v-0.9h4.4v0.9h-1.7v4.7H61.9z"/>
</g>
<g>
<path class="st0" d="M65.6,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H65.6z"/>
</g>
<g>
<path class="st0" d="M70.7,89.9v-5.6h1V89h2.5v0.9H70.7z"/>
</g>
<g>
<path class="st0" d="M74.9,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H74.9z"/>
</g>
<g>
<path class="st0" d="M79.8,87.1c0-1.7,1.3-2.9,2.9-2.9c1.1,0,1.8,0.6,2.2,1.3l-0.8,0.4c-0.3-0.5-0.8-0.8-1.4-0.8
c-1.1,0-1.9,0.8-1.9,2c0,1.2,0.8,2,1.9,2c0.6,0,1.1-0.4,1.4-0.8l0.8,0.4c-0.4,0.7-1.1,1.3-2.2,1.3C81.1,90,79.8,88.8,79.8,87.1z
"/>
</g>
<g>
<path class="st0" d="M85.5,87.1c0-1.7,1.2-2.9,2.9-2.9c1.7,0,2.9,1.2,2.9,2.9S90,90,88.3,90C86.7,90,85.5,88.8,85.5,87.1z
M90.2,87.1c0-1.2-0.7-2-1.9-2c-1.1,0-1.9,0.9-1.9,2c0,1.1,0.7,2,1.9,2C89.5,89.1,90.2,88.3,90.2,87.1z"/>
</g>
<g>
<path class="st0" d="M96.9,89.9v-4.3l-1.7,4.3h-0.4l-1.7-4.3v4.3h-1v-5.6h1.4l1.5,3.8l1.5-3.8h1.4v5.6H96.9z"/>
</g>
<g>
<path class="st0" d="M103,89.9v-5.6h1v5.6H103z"/>
</g>
<g>
<path class="st0" d="M109.7,89.9l-2.9-4v4h-1v-5.6h1l2.9,3.9v-3.9h1v5.6H109.7z"/>
</g>
<g>
<path class="st0" d="M112.4,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8v2.4H112.4z"/>
</g>
<g>
<path class="st0" d="M120.3,89.9l-1.2-2.1h-1v2.1h-1v-5.6h2.5c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.5-1.3,1.6l1.4,2.2H120.3z
M120.4,86.1c0-0.5-0.4-0.9-1-0.9h-1.4V87h1.4C120,87,120.4,86.6,120.4,86.1z"/>
</g>
<g>
<path class="st0" d="M126.6,89.9l-0.4-1.1h-2.6l-0.4,1.1h-1.1l2.2-5.6h1.2l2.2,5.6H126.6z M124.9,85.3l-1,2.7h2L124.9,85.3z"/>
</g>
<g>
<path class="st0" d="M131.4,89.9v-5.6h2.1c1.1,0,1.7,0.8,1.7,1.6c0,0.9-0.6,1.6-1.7,1.6h-1.6v2.3H131.4z M134.7,86
c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C134.2,87.2,134.7,86.6,134.7,86z"/>
</g>
<g>
<path class="st0" d="M139.4,89.9l-1.6-2.3h-1.2v2.3h-0.5v-5.6h2.1c1,0,1.7,0.6,1.7,1.6c0,1-0.7,1.6-1.6,1.6l1.6,2.3H139.4z
M139.4,86c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C138.9,87.2,139.4,86.7,139.4,86z"/>
</g>
<g>
<path class="st0" d="M141.2,87.1c0-1.6,1.1-2.9,2.7-2.9c1.6,0,2.7,1.3,2.7,2.9c0,1.6-1.1,2.9-2.7,2.9
C142.3,90,141.2,88.8,141.2,87.1z M146.1,87.1c0-1.4-0.9-2.5-2.2-2.5c-1.4,0-2.2,1-2.2,2.5c0,1.4,0.9,2.5,2.2,2.5
C145.2,89.6,146.1,88.5,146.1,87.1z"/>
</g>
<g>
<path class="st0" d="M147,89.3l0.3-0.4c0.3,0.3,0.6,0.6,1.1,0.6c0.8,0,1.2-0.5,1.2-1.3v-4h0.5v4c0,1.2-0.8,1.7-1.7,1.7
C147.9,90,147.4,89.8,147,89.3z"/>
</g>
<g>
<path class="st0" d="M151.8,89.9v-5.6h3.5v0.4h-3.1v2.1h3v0.4h-3v2.2h3.1v0.4H151.8z"/>
</g>
<g>
<path class="st0" d="M156.3,87.1c0-1.7,1.3-2.9,2.8-2.9c0.9,0,1.6,0.4,2,1l-0.4,0.3c-0.4-0.5-1-0.8-1.6-0.8
c-1.3,0-2.3,1-2.3,2.5c0,1.4,1,2.5,2.3,2.5c0.7,0,1.3-0.3,1.6-0.8l0.4,0.3c-0.5,0.6-1.2,1-2,1C157.5,90,156.3,88.8,156.3,87.1z"
/>
</g>
<g>
<path class="st0" d="M163.5,89.9v-5.2h-1.8v-0.4h4.1v0.4H164v5.2H163.5z"/>
</g>
</g>
<g>
<polygon class="st0" points="33.7,86.5 41.2,79 48.6,86.5 49.8,86.5 41.2,77.9 32.6,86.5 "/>
<polygon class="st0" points="48.6,87.8 41.2,95.2 33.7,87.8 32.6,87.8 41.2,96.4 49.8,87.8 "/>
<polygon class="st0" points="40.3,86.5 47.8,79 55.3,86.5 56.4,86.5 47.8,77.9 39.2,86.5 "/>
<polygon class="st0" points="55.3,87.8 47.8,95.2 40.3,87.8 39.2,87.8 47.8,96.4 56.4,87.8 "/>
</g>
</g>
</g>
<g>
<path class="st0" d="M51.2,41.3c2,1.1,3.6,2.6,4.7,4.5c1.1,1.9,1.7,4,1.7,6.4c0,2.3-0.6,4.5-1.7,6.4c-1.1,1.9-2.7,3.4-4.7,4.6
c-2,1.1-4.2,1.7-6.6,1.7c-2.4,0-4.6-0.6-6.6-1.7c-2-1.1-3.6-2.6-4.7-4.6c-1.1-1.9-1.7-4.1-1.7-6.4c0-2.3,0.6-4.5,1.7-6.4
c1.1-1.9,2.7-3.4,4.7-4.5c2-1.1,4.2-1.6,6.6-1.6C47,39.6,49.2,40.2,51.2,41.3z M40.5,44.9c-1.3,0.7-2.3,1.7-3,3
c-0.7,1.3-1.1,2.7-1.1,4.2s0.4,3,1.1,4.2c0.8,1.3,1.8,2.3,3,3c1.3,0.7,2.7,1.1,4.1,1.1c1.5,0,2.8-0.4,4.1-1.1c1.3-0.7,2.3-1.8,3-3
c0.7-1.3,1.1-2.7,1.1-4.2s-0.4-2.9-1.1-4.2c-0.7-1.3-1.7-2.3-3-3c-1.3-0.7-2.6-1.1-4.1-1.1C43.2,43.8,41.8,44.2,40.5,44.9z"/>
<path class="st0" d="M76.9,46.8c1.3,0.8,2.4,1.9,3.1,3.4c0.7,1.4,1.1,3.1,1.1,5c0,1.9-0.4,3.5-1.1,4.9c-0.7,1.4-1.8,2.5-3.1,3.3
c-1.3,0.8-2.9,1.2-4.6,1.2c-1.4,0-2.6-0.3-3.7-0.8c-1.1-0.5-2-1.3-2.7-2.4v9.8h-4.6V45.7H66v3.1c0.7-1.1,1.5-1.8,2.6-2.4
c1.1-0.5,2.3-0.8,3.7-0.8C74,45.6,75.6,46,76.9,46.8z M75.1,59.1c1-1.1,1.5-2.4,1.5-4.1c0-1.7-0.5-3-1.5-4.1
c-1-1.1-2.2-1.6-3.8-1.6c-1.6,0-2.8,0.5-3.8,1.6c-1,1-1.5,2.4-1.5,4.1c0,1.7,0.5,3,1.5,4.1c1,1.1,2.3,1.6,3.8,1.6
C72.8,60.7,74.1,60.2,75.1,59.1z"/>
<path class="st0" d="M99.3,48.1c1.5,1.7,2.3,4.1,2.3,7.2c0,0.6,0,1.1,0,1.4H87.7c0.3,1.3,0.9,2.4,1.9,3.1c0.9,0.8,2.1,1.1,3.5,1.1
c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.6l2.5,2.6c-0.9,1-2.1,1.8-3.4,2.4c-1.3,0.6-2.8,0.8-4.5,0.8c-1.9,0-3.6-0.4-5.1-1.2
c-1.5-0.8-2.6-1.9-3.4-3.3c-0.8-1.4-1.2-3.1-1.2-5c0-1.9,0.4-3.5,1.2-5c0.8-1.4,1.9-2.6,3.4-3.4c1.4-0.8,3.1-1.2,4.9-1.2
C95.5,45.6,97.8,46.4,99.3,48.1z M97.4,53.6c0-1.4-0.5-2.5-1.4-3.3c-0.9-0.8-2-1.2-3.4-1.2c-1.3,0-2.4,0.4-3.3,1.2
c-0.9,0.8-1.5,1.9-1.7,3.3H97.4z"/>
<path class="st0" d="M121.5,47.5c1.2,1.3,1.9,3.1,1.9,5.3v11.7h-4.6V54.1c0-1.3-0.4-2.3-1.1-3.1c-0.7-0.8-1.8-1.1-3-1.1
c-1.5,0-2.7,0.5-3.6,1.5s-1.3,2.3-1.3,3.8v9.2h-4.5V45.7h4.5v3.5c1.3-2.4,3.5-3.6,6.7-3.7C118.5,45.5,120.2,46.2,121.5,47.5z"/>
<path class="st0" d="M156.5,39.9h4.9l-8.3,24.5h-4.9l-5.6-18.6l-5.7,18.6h-4.8l-8.3-24.5h5l5.8,19.4l5.7-19.4h4.6l5.8,19.5
L156.5,39.9z"/>
<path class="st0" d="M168,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C166.9,37.7,167.6,37.9,168,38.4z M164,45.7h4.5v18.7H164
V45.7z"/>
<path class="st0" d="M174,39.9h16.9l0,4.1h-12.2v6.6h11.1v4.1h-11.1v9.7H174V39.9z"/>
<path class="st0" d="M197.9,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C196.8,37.7,197.4,37.9,197.9,38.4z M193.8,45.7h4.5v18.7
h-4.5V45.7z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -1,140 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 251.2 114.2" style="enable-background:new 0 0 251.2 114.2;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FED206;}
.st1{fill:#EB6F53;}
.st2{fill:#3BA9B6;}
.st3{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M219.6,43.3C219.5,43.3,219.5,43.3,219.6,43.3c-1.3,0-2.2-1-2.2-2.2c0-0.2,0-0.4,0-0.6
c0-11.9-9.7-21.6-21.6-21.6c-0.2,0-0.4,0-0.6,0c-1.2,0-2.2-0.9-2.2-2.1c0-1.2,0.9-2.2,2.1-2.2c0.2,0,0.5,0,0.7,0
c14.3,0,25.9,11.6,25.9,25.9c0,0.2,0,0.5,0,0.7C221.7,42.4,220.7,43.3,219.6,43.3z"/>
<path class="st1" d="M212.1,43.3C212,43.3,212,43.3,212.1,43.3c-1.3-0.1-2.2-1.1-2.2-2.3c0-0.2,0-0.4,0-0.6
c0-7.7-6.3-14.1-14.1-14.1c-0.2,0-0.4,0-0.6,0c-1.2,0.1-2.2-0.9-2.3-2.1c0-1.2,0.9-2.2,2.1-2.3c0.3,0,0.5,0,0.8,0
c10.2,0,18.4,8.3,18.4,18.4c0,0.2,0,0.5,0,0.8C214.2,42.4,213.2,43.3,212.1,43.3z"/>
<path class="st2" d="M204.3,43.3c-0.1,0-0.1,0-0.2,0c-1.2-0.1-2.1-1.1-2-2.3c0-0.2,0-0.4,0-0.5c0-3.5-2.8-6.3-6.3-6.3
c-0.1,0-0.3,0-0.5,0c-1.2,0.1-2.3-0.8-2.3-2c-0.1-1.2,0.8-2.3,2-2.3c0.3,0,0.6,0,0.9,0c5.9,0,10.7,4.8,10.7,10.7c0,0.3,0,0.5,0,0.9
C206.4,42.4,205.4,43.3,204.3,43.3z"/>
<g>
<g>
<g>
<path class="st3" d="M61.9,89.9v-4.7h-1.7v-0.9h4.4v0.9h-1.7v4.7H61.9z"/>
</g>
<g>
<path class="st3" d="M65.6,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H65.6z"/>
</g>
<g>
<path class="st3" d="M70.7,89.9v-5.6h1V89h2.5v0.9H70.7z"/>
</g>
<g>
<path class="st3" d="M74.9,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8V89h2.9v0.9H74.9z"/>
</g>
<g>
<path class="st3" d="M79.8,87.1c0-1.7,1.3-2.9,2.9-2.9c1.1,0,1.8,0.6,2.2,1.3l-0.8,0.4c-0.3-0.5-0.8-0.8-1.4-0.8
c-1.1,0-1.9,0.8-1.9,2c0,1.2,0.8,2,1.9,2c0.6,0,1.1-0.4,1.4-0.8l0.8,0.4c-0.4,0.7-1.1,1.3-2.2,1.3C81.1,90,79.8,88.8,79.8,87.1z
"/>
</g>
<g>
<path class="st3" d="M85.5,87.1c0-1.7,1.2-2.9,2.9-2.9c1.7,0,2.9,1.2,2.9,2.9S90,90,88.3,90C86.7,90,85.5,88.8,85.5,87.1z
M90.2,87.1c0-1.2-0.7-2-1.9-2c-1.1,0-1.9,0.9-1.9,2c0,1.1,0.7,2,1.9,2C89.5,89.1,90.2,88.3,90.2,87.1z"/>
</g>
<g>
<path class="st3" d="M96.9,89.9v-4.3l-1.7,4.3h-0.4l-1.7-4.3v4.3h-1v-5.6h1.4l1.5,3.8l1.5-3.8h1.4v5.6H96.9z"/>
</g>
<g>
<path class="st3" d="M103,89.9v-5.6h1v5.6H103z"/>
</g>
<g>
<path class="st3" d="M109.7,89.9l-2.9-4v4h-1v-5.6h1l2.9,3.9v-3.9h1v5.6H109.7z"/>
</g>
<g>
<path class="st3" d="M112.4,89.9v-5.6h3.8v0.9h-2.9v1.4h2.8v0.9h-2.8v2.4H112.4z"/>
</g>
<g>
<path class="st3" d="M120.3,89.9l-1.2-2.1h-1v2.1h-1v-5.6h2.5c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.5-1.3,1.6l1.4,2.2H120.3z
M120.4,86.1c0-0.5-0.4-0.9-1-0.9h-1.4V87h1.4C120,87,120.4,86.6,120.4,86.1z"/>
</g>
<g>
<path class="st3" d="M126.6,89.9l-0.4-1.1h-2.6l-0.4,1.1h-1.1l2.2-5.6h1.2l2.2,5.6H126.6z M124.9,85.3l-1,2.7h2L124.9,85.3z"/>
</g>
<g>
<path class="st3" d="M131.4,89.9v-5.6h2.1c1.1,0,1.7,0.8,1.7,1.6c0,0.9-0.6,1.6-1.7,1.6h-1.6v2.3H131.4z M134.7,86
c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C134.2,87.2,134.7,86.6,134.7,86z"/>
</g>
<g>
<path class="st3" d="M139.4,89.9l-1.6-2.3h-1.2v2.3h-0.5v-5.6h2.1c1,0,1.7,0.6,1.7,1.6c0,1-0.7,1.6-1.6,1.6l1.6,2.3H139.4z
M139.4,86c0-0.7-0.5-1.2-1.2-1.2h-1.6v2.4h1.6C138.9,87.2,139.4,86.7,139.4,86z"/>
</g>
<g>
<path class="st3" d="M141.2,87.1c0-1.6,1.1-2.9,2.7-2.9c1.6,0,2.7,1.3,2.7,2.9c0,1.6-1.1,2.9-2.7,2.9
C142.3,90,141.2,88.8,141.2,87.1z M146.1,87.1c0-1.4-0.9-2.5-2.2-2.5c-1.4,0-2.2,1-2.2,2.5c0,1.4,0.9,2.5,2.2,2.5
C145.2,89.6,146.1,88.5,146.1,87.1z"/>
</g>
<g>
<path class="st3" d="M147,89.3l0.3-0.4c0.3,0.3,0.6,0.6,1.1,0.6c0.8,0,1.2-0.5,1.2-1.3v-4h0.5v4c0,1.2-0.8,1.7-1.7,1.7
C147.9,90,147.4,89.8,147,89.3z"/>
</g>
<g>
<path class="st3" d="M151.8,89.9v-5.6h3.5v0.4h-3.1v2.1h3v0.4h-3v2.2h3.1v0.4H151.8z"/>
</g>
<g>
<path class="st3" d="M156.3,87.1c0-1.7,1.3-2.9,2.8-2.9c0.9,0,1.6,0.4,2,1l-0.4,0.3c-0.4-0.5-1-0.8-1.6-0.8
c-1.3,0-2.3,1-2.3,2.5c0,1.4,1,2.5,2.3,2.5c0.7,0,1.3-0.3,1.6-0.8l0.4,0.3c-0.5,0.6-1.2,1-2,1C157.5,90,156.3,88.8,156.3,87.1z"
/>
</g>
<g>
<path class="st3" d="M163.5,89.9v-5.2h-1.8v-0.4h4.1v0.4H164v5.2H163.5z"/>
</g>
</g>
<g>
<polygon class="st3" points="33.7,86.5 41.2,79 48.6,86.5 49.8,86.5 41.2,77.9 32.6,86.5 "/>
<polygon class="st3" points="48.6,87.8 41.2,95.2 33.7,87.8 32.6,87.8 41.2,96.4 49.8,87.8 "/>
<polygon class="st3" points="40.3,86.5 47.8,79 55.3,86.5 56.4,86.5 47.8,77.9 39.2,86.5 "/>
<polygon class="st3" points="55.3,87.8 47.8,95.2 40.3,87.8 39.2,87.8 47.8,96.4 56.4,87.8 "/>
</g>
</g>
</g>
<g>
<path class="st3" d="M51.2,41.3c2,1.1,3.6,2.6,4.7,4.5c1.1,1.9,1.7,4,1.7,6.4c0,2.3-0.6,4.5-1.7,6.4c-1.1,1.9-2.7,3.4-4.7,4.6
c-2,1.1-4.2,1.7-6.6,1.7c-2.4,0-4.6-0.6-6.6-1.7c-2-1.1-3.6-2.6-4.7-4.6c-1.1-1.9-1.7-4.1-1.7-6.4c0-2.3,0.6-4.5,1.7-6.4
c1.1-1.9,2.7-3.4,4.7-4.5c2-1.1,4.2-1.6,6.6-1.6C47,39.6,49.2,40.2,51.2,41.3z M40.5,44.9c-1.3,0.7-2.3,1.7-3,3
c-0.7,1.3-1.1,2.7-1.1,4.2s0.4,3,1.1,4.2c0.8,1.3,1.8,2.3,3,3c1.3,0.7,2.7,1.1,4.1,1.1c1.5,0,2.8-0.4,4.1-1.1c1.3-0.7,2.3-1.8,3-3
c0.7-1.3,1.1-2.7,1.1-4.2s-0.4-2.9-1.1-4.2c-0.7-1.3-1.7-2.3-3-3c-1.3-0.7-2.6-1.1-4.1-1.1C43.2,43.8,41.8,44.2,40.5,44.9z"/>
<path class="st3" d="M76.9,46.8c1.3,0.8,2.4,1.9,3.1,3.4c0.7,1.4,1.1,3.1,1.1,5c0,1.9-0.4,3.5-1.1,4.9c-0.7,1.4-1.8,2.5-3.1,3.3
c-1.3,0.8-2.9,1.2-4.6,1.2c-1.4,0-2.6-0.3-3.7-0.8c-1.1-0.5-2-1.3-2.7-2.4v9.8h-4.6V45.7H66v3.1c0.7-1.1,1.5-1.8,2.6-2.4
c1.1-0.5,2.3-0.8,3.7-0.8C74,45.6,75.6,46,76.9,46.8z M75.1,59.1c1-1.1,1.5-2.4,1.5-4.1c0-1.7-0.5-3-1.5-4.1
c-1-1.1-2.2-1.6-3.8-1.6c-1.6,0-2.8,0.5-3.8,1.6c-1,1-1.5,2.4-1.5,4.1c0,1.7,0.5,3,1.5,4.1c1,1.1,2.3,1.6,3.8,1.6
C72.8,60.7,74.1,60.2,75.1,59.1z"/>
<path class="st3" d="M99.3,48.1c1.5,1.7,2.3,4.1,2.3,7.2c0,0.6,0,1.1,0,1.4H87.7c0.3,1.3,0.9,2.4,1.9,3.1c0.9,0.8,2.1,1.1,3.5,1.1
c1,0,1.9-0.2,2.7-0.5c0.9-0.4,1.6-0.9,2.3-1.6l2.5,2.6c-0.9,1-2.1,1.8-3.4,2.4c-1.3,0.6-2.8,0.8-4.5,0.8c-1.9,0-3.6-0.4-5.1-1.2
c-1.5-0.8-2.6-1.9-3.4-3.3c-0.8-1.4-1.2-3.1-1.2-5c0-1.9,0.4-3.5,1.2-5c0.8-1.4,1.9-2.6,3.4-3.4c1.4-0.8,3.1-1.2,4.9-1.2
C95.5,45.6,97.8,46.4,99.3,48.1z M97.4,53.6c0-1.4-0.5-2.5-1.4-3.3c-0.9-0.8-2-1.2-3.4-1.2c-1.3,0-2.4,0.4-3.3,1.2
c-0.9,0.8-1.5,1.9-1.7,3.3H97.4z"/>
<path class="st3" d="M121.5,47.5c1.2,1.3,1.9,3.1,1.9,5.3v11.7h-4.6V54.1c0-1.3-0.4-2.3-1.1-3.1c-0.7-0.8-1.8-1.1-3-1.1
c-1.5,0-2.7,0.5-3.6,1.5s-1.3,2.3-1.3,3.8v9.2h-4.5V45.7h4.5v3.5c1.3-2.4,3.5-3.6,6.7-3.7C118.5,45.5,120.2,46.2,121.5,47.5z"/>
<path class="st3" d="M156.5,39.9h4.9l-8.3,24.5h-4.9l-5.6-18.6l-5.7,18.6h-4.8l-8.3-24.5h5l5.8,19.4l5.7-19.4h4.6l5.8,19.5
L156.5,39.9z"/>
<path class="st3" d="M168,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C166.9,37.7,167.6,37.9,168,38.4z M164,45.7h4.5v18.7H164
V45.7z"/>
<path class="st3" d="M174,39.9h16.9l0,4.1h-12.2v6.6h11.1v4.1h-11.1v9.7H174V39.9z"/>
<path class="st3" d="M197.9,38.4c0.5,0.5,0.7,1.2,0.7,2c0,0.8-0.2,1.4-0.7,1.9c-0.5,0.5-1.1,0.8-1.9,0.8c-0.7,0-1.4-0.3-1.9-0.8
c-0.5-0.5-0.7-1.2-0.7-1.9c0-0.8,0.2-1.4,0.7-2c0.5-0.5,1.1-0.8,1.9-0.8C196.8,37.7,197.4,37.9,197.9,38.4z M193.8,45.7h4.5v18.7
h-4.5V45.7z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -2,7 +2,7 @@ openapi: 3.0.1
info: info:
title: uCentral gateway API title: uCentral gateway API
description: A process to manage configuration for devices. description: A process to manage configuration for devices.
version: 2.0.0 version: 2.5.0
license: license:
name: BSD3 name: BSD3
url: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE url: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
@@ -61,6 +61,11 @@ components:
- 6 # INTERNAL_ERROR, - 6 # INTERNAL_ERROR,
- 7 # ACCESS_DENIED, - 7 # ACCESS_DENIED,
- 8 # INVALID_TOKEN - 8 # INVALID_TOKEN
- 9 # EXPIRED_TOKEN
- 10 # RATE_LIMIT_EXCEEDED
- 11 # BAD_MFA_TRANSACTION
- 12 # MFA_FAILURE
- 13 # SECURITY_SERVICE_UNREACHABLE
ErrorDetails: ErrorDetails:
type: string type: string
ErrorDescription: ErrorDescription:
@@ -339,16 +344,6 @@ components:
items: items:
$ref: '#/components/schemas/NameValuePair' $ref: '#/components/schemas/NameValuePair'
LifetimeStatistics:
type: object
properties:
serialNumber:
type: string
interfaces:
type: array
items:
$ref: '#/components/schemas/InterfaceStatistics'
CommandDetails: CommandDetails:
type: object type: object
properties: properties:
@@ -446,6 +441,8 @@ components:
name: name:
type: string type: string
modelIds: modelIds:
type: array
items:
type: string type: string
description: description:
type: string type: string
@@ -475,6 +472,8 @@ components:
when: when:
type: integer type: integer
format: int64 format: int64
keepRedirector:
type: boolean
RebootRequest: RebootRequest:
type: object type: object
@@ -651,8 +650,16 @@ components:
type: string type: string
interval: interval:
type: integer type: integer
example: description:
0 - means to stop streaming, values 1-120 in seconds. 0 - means to stop streaming, values 1-120 in seconds.
lifetime:
type: integer
format: int64
description: how long should the telemetry run
kafka:
type: boolean
default: false
description: set to true to start kafka telemetry, false to start websocket telemetry
types: types:
type: array type: array
items: items:
@@ -663,7 +670,8 @@ components:
- state - state
uuid: uuid:
type: string type: string
example: format: uuid
description:
only valid when terminating a stream only valid when terminating a stream
TelemetryStreamResponse: TelemetryStreamResponse:
@@ -679,6 +687,24 @@ components:
format: uri format: uri
example: example:
wss://host.domain:port/endpoint wss://host.domain:port/endpoint
action:
type: string
description: what action resulted from running the command
status:
type: object
properties:
running:
type: boolean
interval:
type: integer
websocketTimer:
type: integer
kafkaTimer:
type: integer
websocketClients:
type: integer
kafkaClients:
type: integer
######################################################################################### #########################################################################################
## ##
@@ -990,7 +1016,7 @@ components:
CapabilitiesModelList: CapabilitiesModelList:
type: object type: object
properties: properties:
devices: device_types:
type: array type: array
items: items:
$ref: '#/components/schemas/CapabilitiesModel' $ref: '#/components/schemas/CapabilitiesModel'
@@ -1703,13 +1729,7 @@ paths:
format: int64 format: int64
required: false required: false
- in: query - in: query
description: Selecting this option means the LifetimeStatistics will be returned. All other parameters will be ignored. description: Selecting this option means the Last Statistics block
name: lifetime
schema:
type: boolean
required: false
- in: query
description: Selecting this option means the LifetimeStatistics will be returned. All other parameters will be ignored.
name: lastOnly name: lastOnly
schema: schema:
type: boolean type: boolean
@@ -1729,7 +1749,6 @@ paths:
schema: schema:
oneOf: oneOf:
- $ref: '#/components/schemas/StatisticsRecords' - $ref: '#/components/schemas/StatisticsRecords'
- $ref: '#/components/schemas/LifetimeStatistics'
403: 403:
$ref: '#/components/responses/Unauthorized' $ref: '#/components/responses/Unauthorized'
404: 404:
@@ -1847,6 +1866,54 @@ paths:
404: 404:
$ref: '#/components/responses/NotFound' $ref: '#/components/responses/NotFound'
/device/{serialNumber}/ping:
post:
tags:
- Commands
summary: Configure a device.
operationId: createConfigurationForADevice
parameters:
- in: path
name: serialNumber
schema:
type: string
required: true
requestBody:
description: Command details
content:
application/json:
schema:
type: object
properties:
serialNumber:
type: string
responses:
200:
description:
Successfull ping os a device
content:
application/json:
schema:
type: object
properties:
serialNumber:
type: string
currentUTCTime:
type: integer
format: int64
deviceUTCTime:
type: integer
format: int64
latency:
type: number
configurationUUID:
type: integer
format: int64
403:
$ref: '#/components/responses/Unauthorized'
404:
$ref: '#/components/responses/NotFound'
/device/{serialNumber}/upgrade: /device/{serialNumber}/upgrade:
post: post:
tags: tags:
@@ -2067,6 +2134,12 @@ paths:
schema: schema:
type: string type: string
required: true required: true
- in: query
name: statusOnly
schema:
type: boolean
default: false
required: false
requestBody: requestBody:
description: Message request details description: Message request details
content: content:
@@ -2348,6 +2421,39 @@ paths:
404: 404:
$ref: '#/components/responses/NotFound' $ref: '#/components/responses/NotFound'
/iptocountry:
get:
tags:
- Utility
summary: Get the country code for an IP address
operationId: getIpToCountry
parameters:
- in: query
name: iplist
schema:
type: string
example:
10.2.2.2,10.3.4.3
required: true
responses:
200:
description: List of country codes.
content:
application/json:
schema:
type: object
properties:
enabled:
type: boolean
countryCodes:
type: array
items:
type: string
403:
$ref: '#/components/responses/Unauthorized'
404:
$ref: '#/components/responses/NotFound'
######################################################################################### #########################################################################################
## ##
## These are endpoints that all services in the uCentral stack must provide ## These are endpoints that all services in the uCentral stack must provide

View File

@@ -75,17 +75,26 @@ openwifi.devicetypes.0 = AP:linksys_ea8300,edgecore_eap101,linksys_e8450-ubi
openwifi.devicetypes.1 = SWITCH:edgecore_ecs4100-12ph openwifi.devicetypes.1 = SWITCH:edgecore_ecs4100-12ph
openwifi.devicetypes.2 = IOT:esp32 openwifi.devicetypes.2 = IOT:esp32
oui.download.uri = https://linuxnet.ca/ieee/oui.txt oui.download.uri = https://linuxnet.ca/ieee/oui.txt
firmware.autoupdate.policy.default = auto
iptocountry.default = US
iptocountry.provider = ipinfo
#iptocountry.provider = ipdata
iptocountry.ipinfo.token =
iptocountry.ipdata.apikey =
autoprovisioning.process = prov,default
# #
# rtty # rtty
# #
rtty.internal = true
rtty.enabled = true rtty.enabled = true
rtty.server = rtty-tip.arilia.com rtty.server = rtty-tip.arilia.com
rtty.port = 5912 rtty.port = 5912
rtty.token = 96181c567b4d0d98c50f127230068fa8 rtty.token = 96181c567b4d0d98c50f127230068fa8
rtty.timeout = 60 rtty.timeout = 60
rtty.viewport = 5913 rtty.viewport = 5913
rtty.assets = $OWGW_ROOT/rtty_ui
############################# #############################
# Generic information for all micro services # Generic information for all micro services
@@ -155,38 +164,6 @@ archiver.db.3.keep = 7
# Logging: please leave as is for now. # Logging: please leave as is for now.
# #
######################################################################## ########################################################################
logging.type = file
logging.formatters.f1.class = PatternFormatter logging.path = $OWGW_ROOT/logs
logging.formatters.f1.pattern = %s: [%p] %t logging.level = debug
logging.formatters.f1.times = UTC
logging.channels.c1.class = ConsoleChannel
logging.channels.c1.formatter = f1
# This is where the logs will be written. This path MUST exist
logging.channels.c2.class = FileChannel
logging.channels.c2.path = $OWGW_ROOT/logs/log
logging.channels.c2.formatter.class = PatternFormatter
logging.channels.c2.formatter.pattern = %Y-%m-%d %H:%M:%S %s: [%p] %t
logging.channels.c2.rotation = 20 M
logging.channels.c2.archive = timestamp
logging.channels.c2.purgeCount = 20
logging.channels.c3.class = ConsoleChannel
logging.channels.c3.pattern = %s: [%p] %t
# External Channel
logging.loggers.root.channel = c2
logging.loggers.root.level = debug
# Inline Channel with PatternFormatter
# logging.loggers.l1.name = logger1
# logging.loggers.l1.channel.class = ConsoleChannel
# logging.loggers.l1.channel.pattern = %s: [%p] %t
# logging.loggers.l1.level = information
# SplitterChannel
# logging.channels.splitter.class = SplitterChannel
# logging.channels.splitter.channels = l1,l2
# logging.loggers.l2.name = logger2
# logging.loggers.l2.channel = splitter

View File

@@ -52,8 +52,8 @@ openwifi.fileuploader.host.0.cert = ${FILEUPLOADER_HOST_CERT}
openwifi.fileuploader.host.0.key = ${FILEUPLOADER_HOST_KEY} openwifi.fileuploader.host.0.key = ${FILEUPLOADER_HOST_KEY}
openwifi.fileuploader.host.0.key.password = ${FILEUPLOADER_HOST_KEY_PASSWORD} openwifi.fileuploader.host.0.key.password = ${FILEUPLOADER_HOST_KEY_PASSWORD}
openwifi.fileuploader.path = ${FILEUPLOADER_PATH} openwifi.fileuploader.path = ${FILEUPLOADER_PATH}
openwifi.fileuploader.uri = ${FILEUPLOADER_URI}
openwifi.fileuploader.maxsize = 10000 openwifi.fileuploader.maxsize = 10000
openwifi.fileuploader.uri = ${FILEUPLOADER_URI}
# #
# Generic section that all microservices must have # Generic section that all microservices must have
@@ -75,7 +75,14 @@ openwifi.devicetypes.0 = AP:linksys_ea8300,edgecore_eap101,linksys_e8450-ubi
openwifi.devicetypes.1 = SWITCH:edgecore_ecs4100-12ph openwifi.devicetypes.1 = SWITCH:edgecore_ecs4100-12ph
openwifi.devicetypes.2 = IOT:esp32 openwifi.devicetypes.2 = IOT:esp32
oui.download.uri = https://linuxnet.ca/ieee/oui.txt oui.download.uri = https://linuxnet.ca/ieee/oui.txt
firmware.autoupdate.policy.default = auto simulatorid = ${SIMULATORID}
iptocountry.default = US
iptocountry.provider = ${IPTOCOUNTRY_PROVIDER}
iptocountry.ipinfo.token = ${IPTOCOUNTRY_IPINFO_TOKEN}
iptocountry.ipdata.apikey = ${IPTOCOUNTRY_IPDATA_APIKEY}
autoprovisioning.process = ${AUTOPROVISIONING_PROCESS}
# #
# rtty # rtty
@@ -152,38 +159,6 @@ archiver.db.3.keep = 7
# Logging: please leave as is for now. # Logging: please leave as is for now.
# #
######################################################################## ########################################################################
logging.type = console
logging.formatters.f1.class = PatternFormatter logging.path = $OWGW_ROOT/logs
logging.formatters.f1.pattern = %Y-%m-%d %H:%M:%S %s: [%p] %t logging.level = debug
logging.formatters.f1.times = UTC
logging.channels.c1.class = ConsoleChannel
logging.channels.c1.formatter = f1
# This is where the logs will be written. This path MUST exist
logging.channels.c2.class = FileChannel
logging.channels.c2.path = $OWGW_ROOT/logs/log
logging.channels.c2.formatter.class = PatternFormatter
logging.channels.c2.formatter.pattern = %Y-%m-%d %H:%M:%S %s: [%p] %t
logging.channels.c2.rotation = 20 M
logging.channels.c2.archive = timestamp
logging.channels.c2.purgeCount = 20
logging.channels.c3.class = ConsoleChannel
logging.channels.c3.pattern = %s: [%p] %t
# External Channel
logging.loggers.root.channel = c1
logging.loggers.root.level = debug
# Inline Channel with PatternFormatter
# logging.loggers.l1.name = logger1
# logging.loggers.l1.channel.class = ConsoleChannel
# logging.loggers.l1.channel.pattern = %s: [%p] %t
# logging.loggers.l1.level = information
# SplitterChannel
# logging.channels.splitter.class = SplitterChannel
# logging.channels.splitter.channels = l1,l2
# logging.loggers.l2.name = logger2
# logging.loggers.l2.channel = splitter

View File

@@ -13,6 +13,9 @@ then
exit 1 exit 1
fi fi
if [[ "${READINESS_METHOD}" == "systeminfo" ]]
then
if [[ "${OWSEC}" == "" ]] if [[ "${OWSEC}" == "" ]]
then then
echo "You must set the variable OWSEC in order to use this script. Something like" echo "You must set the variable OWSEC in order to use this script. Something like"
@@ -34,8 +37,6 @@ then
exit 1 exit 1
fi fi
if [[ "${READINESS_METHOD}" == "systeminfo" ]]
then
# Get OAuth token from OWSEC and cache it or use cached one # Get OAuth token from OWSEC and cache it or use cached one
payload="{ \"userId\" : \"$OWSEC_USERNAME\" , \"password\" : \"$OWSEC_PASSWORD\" }" payload="{ \"userId\" : \"$OWSEC_USERNAME\" , \"password\" : \"$OWSEC_PASSWORD\" }"
if [[ -f "/tmp/token" ]] if [[ -f "/tmp/token" ]]

Binary file not shown.

Binary file not shown.

BIN
rtty_ui/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="web" unicode="&#59626;" d="M983.806 667.807c19.143 71.103 27.347 207.84-98.45 226.982-103.92 10.94-224.249-54.694-287.147-98.45-19.144 2.735-43.756 5.47-65.634 5.47-164.084 2.734-270.738-51.96-363.72-172.289-32.816-43.755-62.898-117.593-73.837-199.635 46.49 79.307 188.697 224.248 336.372 281.677 0 0-226.983-161.349-336.372-391.066v-2.735c-5.47-10.939-10.939-19.143-16.408-32.817-109.39-270.738-19.143-388.331 62.899-407.475 76.572-19.143 183.226 16.409 268.003 109.39 144.94-32.817 289.882 5.47 341.841 32.816C852.54 74.37 923.642 175.555 940.05 276.74H663.842s-13.674-87.511-161.349-87.511c-136.737 0-144.94 158.614-144.94 158.614h590.701s10.939 172.288-73.838 287.147c-49.225 62.899-112.124 120.328-199.635 150.41 27.347 19.143 73.838 51.96 114.859 60.164 76.572 19.143 125.797 8.204 158.614-49.225 43.756-76.572-24.612-251.595-24.612-251.595s38.286 49.225 60.164 123.063z m-612.58-672.744c-117.594-95.716-213.31-84.777-251.595-27.347-32.817 51.96-38.287 139.47 0 262.534 19.143-46.49 46.49-92.981 87.511-134.002 49.225-49.225 106.655-82.042 164.084-101.185z m-5.47 494.986s5.47 114.859 128.533 123.063c109.389 10.939 164.084-38.286 180.492-128.532l-309.025 5.47z" horiz-adv-x="1024" />
<glyph glyph-name="shell" unicode="&#59047;" d="M810.666667 768c46.933333 0 85.333333-38.4 85.333333-85.333333v-597.333334c0-46.933333-38.4-85.333333-85.333333-85.333333H213.333333c-46.933333 0-85.333333 38.4-85.333333 85.333333V682.666667c0 46.933333 38.4 85.333333 85.333333 85.333333z m-18.090667-597.333333h-267.434667v-55.722667h267.434667V170.666667zM250.666667 469.034667v-69.717334l176.469333-64.426666 5.546667-1.194667-0.298667-1.706667-5.248-0.597333-176.469333-65.92v-69.717333l251.989333 108.501333v56.32l-251.989333 108.458667z" horiz-adv-x="1024" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 542 KiB

1
rtty_ui/index.html Normal file
View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>Rttys</title><link href="/css/app.0e046291.css" rel="preload" as="style"><link href="/css/chunk-vendors.b221ddbd.css" rel="preload" as="style"><link href="/js/app.79bf330a.js" rel="preload" as="script"><link href="/js/chunk-vendors.7fd2577a.js" rel="preload" as="script"><link href="/css/chunk-vendors.b221ddbd.css" rel="stylesheet"><link href="/css/app.0e046291.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but Rttys doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.7fd2577a.js"></script><script src="/js/app.79bf330a.js"></script></body></html>

BIN
rtty_ui/js/app.79bf330a.js Normal file

Binary file not shown.

Binary file not shown.

147
src/CapabilitiesCache.h Normal file
View File

@@ -0,0 +1,147 @@
//
// Created by stephane bourque on 2021-11-17.
//
#pragma once
#include "framework/MicroService.h"
#include "nlohmann/json.hpp"
namespace OpenWifi {
const std::string PlatformCacheFileName{"/plat_cache.json"};
const std::string CapabilitiesCacheFileName{"/caps_cache.json"};
typedef std::map<std::string,nlohmann::json> CapabilitiesCache_t;
class CapabilitiesCache {
public:
static auto instance() {
static auto instance = new CapabilitiesCache;
return instance;
}
inline void Add(const std::string & DeviceType, const std::string & Platform, const std::string & FullCapabilities) {
if(DeviceType.empty() || Platform.empty())
return;
std::lock_guard G(Mutex_);
if(!PlatformsLoaded_)
LoadPlatforms();
auto P = Poco::toUpper(Platform);
auto Hint = Platforms_.find(DeviceType);
if(Hint==Platforms_.end()) {
Platforms_.insert(std::make_pair(DeviceType,P));
SavePlatforms();
} else if(Hint->second != P) {
Hint->second = P;
SavePlatforms();
}
if(!CapabilitiesLoaded_)
LoadCapabilities();
auto CapHint = Capabilities_.find(DeviceType);
if(CapHint==Capabilities_.end()) {
Capabilities_[DeviceType] = nlohmann::json::parse(FullCapabilities);
SaveCapabilities();
} else {
CapHint->second = nlohmann::json::parse(FullCapabilities);
SaveCapabilities();
}
}
inline std::string GetPlatform(const std::string & DeviceType) {
std::lock_guard G(Mutex_);
if(!PlatformsLoaded_) {
LoadPlatforms();
}
auto Hint = Platforms_.find(DeviceType);
if(Hint==Platforms_.end())
return "AP";
return Hint->second;
}
inline nlohmann::json GetCapabilities(const std::string & DeviceType) {
std::lock_guard G(Mutex_);
if(!CapabilitiesLoaded_) {
LoadCapabilities();
}
auto Hint = Capabilities_.find(DeviceType);
if(Hint==Capabilities_.end())
return nlohmann::json{};
return Hint->second;
}
inline const CapabilitiesCache_t & AllCapabilities() {
std::lock_guard G(Mutex_);
if(!CapabilitiesLoaded_) {
LoadCapabilities();
}
return Capabilities_;
}
private:
std::recursive_mutex Mutex_;
std::atomic_bool PlatformsLoaded_=false;
std::atomic_bool CapabilitiesLoaded_=false;
std::map<std::string,std::string> Platforms_;
CapabilitiesCache_t Capabilities_;
std::string PlatformCacheFileName_{ MicroService::instance().DataDir()+PlatformCacheFileName };
std::string CapabilitiesCacheFileName_{ MicroService::instance().DataDir()+CapabilitiesCacheFileName };
inline void LoadPlatforms() {
try {
std::ifstream i(PlatformCacheFileName_);
nlohmann::json cache;
i >> cache;
for(const auto &[Type,Platform]:cache.items()) {
Platforms_[Type] = Platform;
}
} catch(...) {
}
PlatformsLoaded_ = true;
}
inline void SavePlatforms() {
try {
std::ofstream i(PlatformCacheFileName_);
nlohmann::json cache(Platforms_);
i << cache;
} catch (...) {
}
}
inline void LoadCapabilities() {
try {
std::ifstream i(CapabilitiesCacheFileName_, std::ios_base::binary|std::ios_base::in);
nlohmann::json cache;
i >> cache;
for(const auto &[Type,Caps]:cache.items()) {
Capabilities_[Type] = Caps;
}
} catch(...) {
}
CapabilitiesLoaded_ = true;
}
inline void SaveCapabilities() {
try {
std::ofstream i(CapabilitiesCacheFileName_, std::ios_base::trunc | std::ios_base::out | std::ios_base::binary );
nlohmann::json cache(Capabilities_);
i << cache;
} catch (...) {
}
}
};
}

View File

@@ -17,9 +17,7 @@
namespace OpenWifi::Config { namespace OpenWifi::Config {
static std::string DefaultConfiguration; const static std::string BasicConfig {
static std::string BasicConfig {
R"lit({ R"lit({
"uuid": 1, "uuid": 1,
"radios": [ "radios": [
@@ -119,36 +117,36 @@ namespace OpenWifi::Config {
} }
})lit"}; })lit"};
void SetBasicConfigFile() { void Config::SetBasicConfigFile() {
try {
Poco::File DefaultConfigFileName{MicroService::instance().DataDir() + "/default_config.json"}; Poco::File DefaultConfigFileName{MicroService::instance().DataDir() + "/default_config.json"};
DefaultConfiguration = BasicConfig; DefaultConfiguration_ = BasicConfig;
std::ofstream F; std::ofstream OS(DefaultConfigFileName.path(), std::ios::binary | std::ios::trunc );
F.open(DefaultConfigFileName.path(),std::ios::binary); std::istringstream IS(DefaultConfiguration_);
F << BasicConfig ; Poco::StreamCopier::copyStream(IS, OS);
F.close(); } catch (...) {
DefaultConfiguration_ = BasicConfig;
}
} }
Config::Config() { Config::Config() {
Config_ = DefaultConfiguration; if(DefaultConfiguration_.empty())
Init();
Config_ = DefaultConfiguration_;
} }
void Config::Init() { void Config::Init() {
if(DefaultConfiguration.empty()) { if(DefaultConfiguration_.empty()) {
// open the file // open the file
Poco::File DefaultConfigFileName{MicroService::instance().DataDir()+"/default_config.json"};
try { try {
Poco::File DefaultConfigFileName{MicroService::instance().DataDir()+"/default_config.json"};
if (!DefaultConfigFileName.exists()) { if (!DefaultConfigFileName.exists()) {
SetBasicConfigFile(); SetBasicConfigFile();
} else { } else {
std::ifstream F; std::ifstream F(DefaultConfigFileName.path(),std::ios::binary | std::ios::in);
F.open(DefaultConfigFileName.path(),std::ios::binary); std::ostringstream C;
while(!F.eof()) { Poco::StreamCopier::copyStream(F,C);
std::string Line; DefaultConfiguration_ = C.str();
F >> Line;
DefaultConfiguration += Line + "\n" ;
}
F.close();
// std::cout << "Default config: " << DefaultConfiguration << std::endl;
} }
} catch (...) { } catch (...) {
SetBasicConfigFile(); SetBasicConfigFile();
@@ -159,7 +157,7 @@ namespace OpenWifi::Config {
bool Config::SetUUID(uint64_t UUID) { bool Config::SetUUID(uint64_t UUID) {
try { try {
Poco::JSON::Parser Parser; Poco::JSON::Parser Parser;
Poco::JSON::Object::Ptr Object = Parser.parse(Config_).extract<Poco::JSON::Object::Ptr>(); auto Object = Parser.parse(Config_).extract<Poco::JSON::Object::Ptr>();
Object->set("uuid", UUID); Object->set("uuid", UUID);
std::ostringstream NewConfig; std::ostringstream NewConfig;
Poco::JSON::Stringifier Stringifier; Poco::JSON::Stringifier Stringifier;
@@ -182,7 +180,7 @@ namespace OpenWifi::Config {
return true; return true;
return false; return false;
} }
catch (const Poco::Exception &E) catch (...)
{ {
return false; return false;
} }
@@ -193,7 +191,11 @@ namespace OpenWifi::Config {
return Parser.parse(Config_).extract<Poco::JSON::Object::Ptr>(); return Parser.parse(Config_).extract<Poco::JSON::Object::Ptr>();
} }
std::string Config::Default() { return DefaultConfiguration; } std::string Config::Default() {
if(DefaultConfiguration_.empty())
Init();
return DefaultConfiguration_;
}
std::string Capabilities::Default() { std::string Capabilities::Default() {
return std::string(R"lit({"model":{"id":"linksys,ea8300","name":"Linksys EA8300 (Dallas)"}, return std::string(R"lit({"model":{"id":"linksys,ea8300","name":"Linksys EA8300 (Dallas)"},

View File

@@ -6,8 +6,7 @@
// Arilia Wireless Inc. // Arilia Wireless Inc.
// //
#ifndef UCENTRAL_UCENTRALCONFIG_H #pragma once
#define UCENTRAL_UCENTRALCONFIG_H
#include <string> #include <string>
#include "Poco/JSON/Object.h" #include "Poco/JSON/Object.h"
@@ -17,18 +16,20 @@ namespace OpenWifi::Config {
class Config { class Config {
public: public:
explicit Config(const std::string &Config) explicit Config(const std::string &Config)
:Config_(Config) {} :Config_(Config) {
}
Config(); Config();
static void Init();
bool SetUUID(uint64_t UUID); bool SetUUID(uint64_t UUID);
[[nodiscard]] bool Valid(); [[nodiscard]] bool Valid();
[[nodiscard]] std::string get() { return Config_; }; [[nodiscard]] std::string get() { return Config_; };
[[nodiscard]] static std::string Default(); [[nodiscard]] std::string Default();
[[nodiscard]] Poco::JSON::Object::Ptr to_json(); [[nodiscard]] Poco::JSON::Object::Ptr to_json();
private: private:
void Init();
void SetBasicConfigFile();
inline static std::string DefaultConfiguration_ = "";
std::string Config_; std::string Config_;
}; };
@@ -63,4 +64,3 @@ namespace OpenWifi::Config {
} // namespace } // namespace
#endif //UCENTRAL_UCENTRALCONFIG_H

View File

@@ -17,7 +17,6 @@
#include "framework/MicroService.h" #include "framework/MicroService.h"
#include "framework/uCentral_Protocol.h" #include "framework/uCentral_Protocol.h"
namespace OpenWifi { namespace OpenWifi {
void CommandManager::run() { void CommandManager::run() {
@@ -29,131 +28,156 @@ namespace OpenWifi {
break; break;
std::vector<GWObjects::CommandDetails> Commands; std::vector<GWObjects::CommandDetails> Commands;
if(StorageService()->GetReadyToExecuteCommands(1,200,Commands)) if(StorageService()->GetReadyToExecuteCommands(0,200,Commands))
{ {
for(auto & Cmd: Commands) for(auto & Cmd: Commands)
{ {
if(!Running_) if(!Running_)
break; break;
try {
uint64_t RPC_Id;
Poco::JSON::Parser P; Poco::JSON::Parser P;
bool Sent;
Logger().information(Poco::format("Parsing: %s", Cmd.UUID));
auto Params = P.parse(Cmd.Details).extract<Poco::JSON::Object::Ptr>(); auto Params = P.parse(Cmd.Details).extract<Poco::JSON::Object::Ptr>();
if(SendCommand( Cmd.SerialNumber, Logger().information(Poco::format("Parsed: %s", Cmd.UUID));
auto Result = PostCommandDisk( Cmd.SerialNumber,
Cmd.Command, Cmd.Command,
*Params, *Params,
Cmd.UUID, Cmd.UUID,
RPC_Id)) { Sent);
if(Sent) {
StorageService()->SetCommandExecuted(Cmd.UUID); StorageService()->SetCommandExecuted(Cmd.UUID);
Logger_.information(Poco::format("Sent command '%s' to '%s'",Cmd.Command,Cmd.SerialNumber)); Logger().information(Poco::format("%s: Sent command '%s-%s'", Cmd.SerialNumber, Cmd.Command, Cmd.UUID));
} else { } else {
Logger_.information(Poco::format("Failed to send command '%s' to %s",Cmd.Command,Cmd.SerialNumber)); Logger().information(Poco::format("%s: Could not send command '%s-%s'", Cmd.SerialNumber, Cmd.Command, Cmd.UUID));
}
} catch (const Poco::Exception &E) {
Logger().information(Poco::format("%s: Failed command '%s-%s'", Cmd.SerialNumber, Cmd.Command, Cmd.UUID));
Logger().log(E);
StorageService()->SetCommandExecuted(Cmd.UUID);
} catch (...) {
Logger().information(Poco::format("%s: Exception - hard fail - Failed command '%s-%s'", Cmd.SerialNumber, Cmd.Command, Cmd.UUID));
StorageService()->SetCommandExecuted(Cmd.UUID);
} }
} }
} }
Janitor();
} }
} }
int CommandManager::Start() { int CommandManager::Start() {
Logger_.notice("Starting..."); Logger().notice("Starting...");
ManagerThread.start(*this); ManagerThread.start(*this);
JanitorCallback_ = std::make_unique<Poco::TimerCallback<CommandManager>>(*this,&CommandManager::onTimer);
Timer_.setStartInterval( 10000 );
Timer_.setPeriodicInterval(5 * 60 * 1000); // 1 hours
Timer_.start(*JanitorCallback_);
return 0; return 0;
} }
void CommandManager::Stop() { void CommandManager::Stop() {
Logger_.notice("Stopping..."); Logger().notice("Stopping...");
Running_ = false; Running_ = false;
Timer_.stop();
ManagerThread.wakeUp(); ManagerThread.wakeUp();
ManagerThread.join(); ManagerThread.join();
} }
void CommandManager::WakeUp() { void CommandManager::WakeUp() {
Logger_.notice("Waking up.."); Logger().notice("Waking up...");
ManagerThread.wakeUp(); ManagerThread.wakeUp();
} }
void CommandManager::Janitor() { void CommandManager::onTimer(Poco::Timer & timer) {
std::lock_guard G(Mutex_); std::lock_guard G(Mutex_);
uint64_t Now = time(nullptr); Logger().information("Removing expired commands: start");
Logger_.information("Janitor starting."); auto Now = std::chrono::high_resolution_clock::now();
for(auto i=OutStandingRequests_.begin();i!=OutStandingRequests_.end();) { for(auto i=OutStandingRequests_.begin();i!=OutStandingRequests_.end();) {
if((Now-i->second.Submitted)>120) std::chrono::duration<double, std::milli> delta = Now - i->second->submitted;
if(delta > 120000ms) {
i = OutStandingRequests_.erase(i); i = OutStandingRequests_.erase(i);
else } else {
++i; ++i;
} }
Logger_.information("Janitor finished."); }
Logger().information("Removing expired commands: done");
} }
bool CommandManager::GetCommand(uint64_t Id, const std::string &SerialNumber, CommandTag &T) { std::shared_ptr<CommandManager::promise_type_t> CommandManager::PostCommand( const std::string &SerialNumber,
std::lock_guard G(Mutex_);
CommandTagIndex TI{.Id=Id,.SerialNumber=SerialNumber};
auto Hint=OutStandingRequests_.find(TI);
if(Hint==OutStandingRequests_.end() || Hint->second.Completed==0)
return false;
T = Hint->second;
OutStandingRequests_.erase(Hint);
return true;
}
bool CommandManager::SendCommand( const std::string &SerialNumber,
const std::string &Method, const std::string &Method,
const Poco::JSON::Object &Params, const Poco::JSON::Object &Params,
const std::string &UUID, const std::string &UUID,
uint64_t & Id, bool oneway_rpc,
bool oneway_rpc) { bool disk_only,
bool & Sent) {
Sent=false;
if(!DeviceRegistry()->Connected(SerialNumber)) {
return nullptr;
}
std::stringstream ToSend; std::stringstream ToSend;
std::unique_lock G(Mutex_); auto Object = std::make_shared<RpcObject>();
CommandTagIndex Idx;
{
std::lock_guard M(Mutex_);
if (oneway_rpc) if (oneway_rpc)
Id = 1; Idx.Id = 1;
else else
Id = ++Id_; Idx.Id = ++Id_;
Idx.SerialNumber = SerialNumber;
Poco::JSON::Object CompleteRPC; Poco::JSON::Object CompleteRPC;
CompleteRPC.set(uCentralProtocol::JSONRPC, uCentralProtocol::JSONRPC_VERSION); CompleteRPC.set(uCentralProtocol::JSONRPC, uCentralProtocol::JSONRPC_VERSION);
CompleteRPC.set(uCentralProtocol::ID, Id); CompleteRPC.set(uCentralProtocol::ID, Idx.Id);
CompleteRPC.set(uCentralProtocol::METHOD, Method); CompleteRPC.set(uCentralProtocol::METHOD, Method);
CompleteRPC.set(uCentralProtocol::PARAMS, Params); CompleteRPC.set(uCentralProtocol::PARAMS, Params);
Poco::JSON::Stringifier::stringify(CompleteRPC, ToSend); Poco::JSON::Stringifier::stringify(CompleteRPC, ToSend);
Logger_.information( Logger().information(
Poco::format("(%s): Sending command '%s', ID: %lu", SerialNumber, Method, Id)); Poco::format("(%s): Sending command '%s', ID: %lu", SerialNumber, Method, Idx.Id));
CommandTagIndex Idx{.Id = Id, .SerialNumber = SerialNumber};
CommandTag Tag; Object->submitted = std::chrono::high_resolution_clock::now();
Tag.UUID = UUID; Object->uuid = UUID;
Tag.Submitted = std::time(nullptr); if(disk_only) {
Tag.Completed = 0; Object->rpc_entry = nullptr;
Tag.Result = Poco::makeShared<Poco::JSON::Object>(); } else {
OutStandingRequests_[Idx] = Tag; Object->rpc_entry = std::make_shared<CommandManager::promise_type_t>();
G.unlock(); }
return DeviceRegistry()->SendFrame(SerialNumber, ToSend.str()); OutStandingRequests_[Idx] = Object;
}
if(DeviceRegistry()->SendFrame(SerialNumber, ToSend.str())) {
Sent=true;
return Object->rpc_entry;
}
return nullptr;
} }
void CommandManager::PostCommandResult(const std::string &SerialNumber, Poco::JSON::Object::Ptr Obj) { void CommandManager::PostCommandResult(const std::string &SerialNumber, Poco::JSON::Object::Ptr Obj) {
if(!Obj->has(uCentralProtocol::ID)){ if(!Obj->has(uCentralProtocol::ID)){
Logger_.error(Poco::format("(%s): Invalid RPC response.",SerialNumber)); Logger().error(Poco::format("(%s): Invalid RPC response.",SerialNumber));
return; return;
} }
uint64_t ID = Obj->get(uCentralProtocol::ID); uint64_t ID = Obj->get(uCentralProtocol::ID);
if(ID<2) { if(ID<2) {
Logger_.error(Poco::format("(%s): Ignoring RPC response.",SerialNumber)); Logger().error(Poco::format("(%s): Ignoring RPC response.",SerialNumber));
return; return;
} }
std::unique_lock G(Mutex_); std::lock_guard G(Mutex_);
auto Idx = CommandTagIndex{.Id = ID, .SerialNumber = SerialNumber}; auto Idx = CommandTagIndex{.Id = ID, .SerialNumber = SerialNumber};
auto RPC = OutStandingRequests_.find(Idx); auto RPC = OutStandingRequests_.find(Idx);
if (RPC == OutStandingRequests_.end()) { if (RPC == OutStandingRequests_.end()) {
Logger_.warning(Poco::format("(%s): Outdated RPC %lu", SerialNumber, ID)); Logger().warning(Poco::format("(%s): Outdated RPC %lu", SerialNumber, ID));
return; return;
} }
RPC->second.Completed = std::time(nullptr); std::chrono::duration<double, std::milli> rpc_execution_time = std::chrono::high_resolution_clock::now() - RPC->second->submitted;
RPC->second.Result = Obj; StorageService()->CommandCompleted(RPC->second->uuid, Obj, rpc_execution_time, true);
Logger_.information(Poco::format("(%s): Received RPC answer %lu", SerialNumber, ID)); if(RPC->second->rpc_entry) {
G.unlock(); RPC->second->rpc_entry->set_value(Obj);
StorageService()->CommandCompleted(RPC->second.UUID, Obj, true); }
Logger().information(Poco::format("(%s): Received RPC answer %lu", SerialNumber, ID));
} }
} // namespace } // namespace

View File

@@ -6,8 +6,7 @@
// Arilia Wireless Inc. // Arilia Wireless Inc.
// //
#ifndef UCENTRAL_UCOMMANDMANAGER_H #pragma once
#define UCENTRAL_UCOMMANDMANAGER_H
#include <chrono> #include <chrono>
#include <future> #include <future>
@@ -18,6 +17,7 @@
#include "Poco/JSON/Object.h" #include "Poco/JSON/Object.h"
#include "Poco/Net/HTTPServerRequest.h" #include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h" #include "Poco/Net/HTTPServerResponse.h"
#include "Poco/Timer.h"
#include "RESTObjects//RESTAPI_GWobjects.h" #include "RESTObjects//RESTAPI_GWobjects.h"
#include "framework/MicroService.h" #include "framework/MicroService.h"
@@ -43,50 +43,108 @@ namespace OpenWifi {
return false; return false;
} }
struct CommandTag {
std::string UUID;
Poco::JSON::Object::Ptr Result;
uint64_t Submitted=0;
uint64_t Completed=0;
};
class CommandManager : public SubSystemServer, Poco::Runnable { class CommandManager : public SubSystemServer, Poco::Runnable {
public: public:
typedef Poco::JSON::Object::Ptr objtype_t;
typedef std::promise<objtype_t> promise_type_t;
struct RpcObject {
std::string uuid;
std::chrono::time_point<std::chrono::high_resolution_clock> submitted = std::chrono::high_resolution_clock::now();
std::shared_ptr<promise_type_t> rpc_entry;
};
int Start() override; int Start() override;
void Stop() override; void Stop() override;
void WakeUp(); void WakeUp();
void PostCommandResult(const std::string &SerialNumber, Poco::JSON::Object::Ptr Obj); void PostCommandResult(const std::string &SerialNumber, Poco::JSON::Object::Ptr Obj);
bool SendCommand( const std::string &SerialNumber,
std::shared_ptr<promise_type_t> PostCommandOneWayDisk(
const std::string &SerialNumber,
const std::string &Method, const std::string &Method,
const Poco::JSON::Object &Params, const Poco::JSON::Object &Params,
const std::string &UUID, const std::string &UUID,
uint64_t & Id, bool & Sent) {
bool oneway_rpc=false); return PostCommand(SerialNumber,
void Janitor(); Method,
Params,
UUID,
true, true, Sent );
}
std::shared_ptr<promise_type_t> PostCommandDisk(
const std::string &SerialNumber,
const std::string &Method,
const Poco::JSON::Object &Params,
const std::string &UUID,
bool & Sent) {
return PostCommand(SerialNumber,
Method,
Params,
UUID,
false, true, Sent );
}
std::shared_ptr<promise_type_t> PostCommand(
const std::string &SerialNumber,
const std::string &Method,
const Poco::JSON::Object &Params,
const std::string &UUID,
bool & Sent) {
return PostCommand(SerialNumber,
Method,
Params,
UUID,
false,
false, Sent );
}
std::shared_ptr<promise_type_t> PostCommandOneWay(
const std::string &SerialNumber,
const std::string &Method,
const Poco::JSON::Object &Params,
const std::string &UUID,
bool & Sent) {
return PostCommand(SerialNumber,
Method,
Params,
UUID,
true,
false, Sent );
}
void run() override; void run() override;
bool GetCommand(uint64_t Id, const std::string & SerialNumber, CommandTag &T); static auto instance() {
static auto instance_ = new CommandManager;
static CommandManager *instance() {
static CommandManager *instance_ = new CommandManager;
return instance_; return instance_;
} }
inline bool Running() const { return Running_; } inline bool Running() const { return Running_; }
void onTimer(Poco::Timer & timer);
private: private:
std::atomic_bool Running_ = false; std::atomic_bool Running_ = false;
Poco::Thread ManagerThread; Poco::Thread ManagerThread;
uint64_t Id_=2; // do not start @1. We ignore ID=1 & 0 is illegal.. uint64_t Id_=3; // do not start @1. We ignore ID=1 & 0 is illegal..
std::map<CommandTagIndex,CommandTag> OutStandingRequests_; std::map<CommandTagIndex,std::shared_ptr<RpcObject>> OutStandingRequests_;
Poco::Timer Timer_;
std::unique_ptr<Poco::TimerCallback<CommandManager>> JanitorCallback_;
std::shared_ptr<promise_type_t> PostCommand(
const std::string &SerialNumber,
const std::string &Method,
const Poco::JSON::Object &Params,
const std::string &UUID,
bool oneway_rpc,
bool disk_only,
bool & Sent);
CommandManager() noexcept: CommandManager() noexcept:
SubSystemServer("CommandManager", "CMD-MGR", "command.manager") SubSystemServer("CommandManager", "CMD-MGR", "command.manager") {
{
} }
}; };
inline CommandManager * CommandManager() { return CommandManager::instance(); } inline auto CommandManager() { return CommandManager::instance(); }
} // namespace } // namespace
#endif //UCENTRAL_UCOMMANDMANAGER_H

View File

@@ -1,8 +0,0 @@
//
// Created by stephane bourque on 2021-09-21.
//
#include "ConfigurationCache.h"
namespace OpenWifi {
}

View File

@@ -2,12 +2,12 @@
// Created by stephane bourque on 2021-09-21. // Created by stephane bourque on 2021-09-21.
// //
#ifndef OWGW_CONFIGURATIONCACHE_H #pragma once
#define OWGW_CONFIGURATIONCACHE_H
#include <map> #include <map>
#include <string> #include <string>
#include <mutex> #include <mutex>
#include "framework/MicroService.h"
namespace OpenWifi { namespace OpenWifi {
class ConfigurationCache { class ConfigurationCache {
@@ -18,7 +18,7 @@ namespace OpenWifi {
return instance; return instance;
} }
inline uint64_t CurrentConfig(const std::string &SerialNumber) { inline uint64_t CurrentConfig(uint64_t SerialNumber) {
std::lock_guard G(Mutex_); std::lock_guard G(Mutex_);
const auto Hint = Cache_.find(SerialNumber); const auto Hint = Cache_.find(SerialNumber);
if(Hint==end(Cache_)) if(Hint==end(Cache_))
@@ -26,17 +26,25 @@ namespace OpenWifi {
return Hint->second; return Hint->second;
} }
inline void Add(const std::string &SerialNumber, uint64_t Id) { inline void Add(uint64_t SerialNumber, uint64_t Id) {
std::lock_guard G(Mutex_); std::lock_guard G(Mutex_);
Cache_[SerialNumber]=Id; Cache_[SerialNumber]=Id;
} }
private: private:
std::mutex Mutex_; std::recursive_mutex Mutex_;
std::map<std::string,uint64_t> Cache_; std::map<uint64_t,uint64_t> Cache_;
}; };
inline uint64_t GetCurrentConfigurationID(const std::string &S) { return ConfigurationCache::instance().CurrentConfig(S); } inline uint64_t GetCurrentConfigurationID(uint64_t SerialNumber) {
inline void SetCurrentConfigurationID(const std::string &S, uint64_t ID) { ConfigurationCache::instance().Add(S,ID); } return ConfigurationCache::instance().CurrentConfig(SerialNumber);
}
inline void SetCurrentConfigurationID(const std::string & SerialNumber, uint64_t ID) {
return ConfigurationCache::instance().Add(Utils::SerialNumberToInt(SerialNumber), ID);
}
inline void SetCurrentConfigurationID(uint64_t SerialNumber, uint64_t ID) {
return ConfigurationCache::instance().Add(SerialNumber, ID);
}
} }
#endif // OWGW_CONFIGURATIONCACHE_H

View File

@@ -21,9 +21,11 @@
#include "StorageArchiver.h" #include "StorageArchiver.h"
#include "StorageService.h" #include "StorageService.h"
#include "TelemetryStream.h" #include "TelemetryStream.h"
#include "WebSocketServer.h" #include "WS_Server.h"
#include "framework/ConfigurationValidator.h" #include "framework/ConfigurationValidator.h"
#include "framework/MicroService.h" #include "framework/MicroService.h"
#include "FindCountry.h"
#include "rttys/RTTYS_server.h"
namespace OpenWifi { namespace OpenWifi {
class Daemon *Daemon::instance() { class Daemon *Daemon::instance() {
@@ -36,42 +38,55 @@ namespace OpenWifi {
StorageService(), StorageService(),
SerialNumberCache(), SerialNumberCache(),
ConfigurationValidator(), ConfigurationValidator(),
OUIServer(),
FindCountryFromIP(),
DeviceRegistry(), DeviceRegistry(),
WebSocketServer(),
CommandManager(), CommandManager(),
FileUploader(), FileUploader(),
OUIServer(),
StorageArchiver(), StorageArchiver(),
TelemetryStream() TelemetryStream(),
RTTYS_server(),
WebSocketServer()
}); });
return &instance; return &instance;
} }
static const std::vector<std::pair<std::string,std::string>> DefaultDeviceTypes{
{"cig_wf160d","AP"},
{"cig_wf188","AP"},
{"cig_wf188n","AP"},
{"cig_wf194c","AP"},
{"cig_wf194c4","AP"},
{"edgecore_eap101","AP"},
{"edgecore_eap102","AP"},
{"edgecore_ecs4100-12ph","AP"},
{"edgecore_ecw5211","AP"},
{"edgecore_ecw5410","AP"},
{"edgecore_oap100","AP"},
{"edgecore_spw2ac1200","SWITCH"},
{"edgecore_spw2ac1200-lan-poe","SWITCH"},
{"edgecore_ssw2ac2600","SWITCH"},
{"hfcl_ion4","AP"},
{"indio_um-305ac","AP"},
{"linksys_e8450-ubi","AP"},
{"linksys_ea6350","AP"},
{"linksys_ea6350-v4","AP"},
{"linksys_ea8300","AP"},
{"mikrotik_nand","AP"},
{"tp-link_ec420-g1","AP"},
{"tplink_cpe210_v3","AP"},
{"tplink_cpe510_v3","AP"},
{"tplink_eap225_outdoor_v1","AP"},
{"tplink_ec420","AP"},
{"tplink_ex227","AP"},
{"tplink_ex228","AP"},
{"tplink_ex447","AP"},
{"wallys_dr40x9","AP"}
};
void Daemon::initialize() { void Daemon::initialize() {
Config::Config::Init();
AutoProvisioning_ = config().getBool("openwifi.autoprovisioning",false); AutoProvisioning_ = config().getBool("openwifi.autoprovisioning",false);
DeviceTypes_ = DefaultDeviceTypes;
// DeviceTypeIdentifications_
Types::StringVec Keys;
config().keys("openwifi.devicetypes",Keys);
for(const auto & i:Keys)
{
std::string Line = config().getString("openwifi.devicetypes."+i);
auto P1 = Line.find_first_of(':');
auto Type = Line.substr(0, P1);
auto List = Line.substr(P1+1);
Types::StringVec Tokens = Utils::Split(List);
auto Entry = DeviceTypeIdentifications_.find(Type);
if(DeviceTypeIdentifications_.end() == Entry) {
std::set<std::string> S;
S.insert(Tokens.begin(),Tokens.end());
DeviceTypeIdentifications_[Type] = S;
} else {
Entry->second.insert(Tokens.begin(),Tokens.end());
}
}
} }
void MicroServicePostInitialization() { void MicroServicePostInitialization() {
@@ -79,16 +94,15 @@ namespace OpenWifi {
} }
[[nodiscard]] std::string Daemon::IdentifyDevice(const std::string & Id ) const { [[nodiscard]] std::string Daemon::IdentifyDevice(const std::string & Id ) const {
for(const auto &[Type,List]:DeviceTypeIdentifications_) for(const auto &[DeviceType,Type]:DeviceTypes_)
{ {
if(List.find(Id)!=List.end()) if(Id == DeviceType)
return Type; return Type;
} }
return "AP"; return "AP";
} }
} }
int main(int argc, char **argv) { int main(int argc, char **argv) {
try { try {

View File

@@ -6,8 +6,7 @@
// Arilia Wireless Inc. // Arilia Wireless Inc.
// //
#ifndef UCENTRAL_UCENTRAL_H #pragma once
#define UCENTRAL_UCENTRAL_H
#include <array> #include <array>
#include <iostream> #include <iostream>
@@ -55,7 +54,7 @@ namespace OpenWifi {
Poco::Logger & Log() { return Poco::Logger::get(AppName()); } Poco::Logger & Log() { return Poco::Logger::get(AppName()); }
private: private:
bool AutoProvisioning_ = false; bool AutoProvisioning_ = false;
Types::StringMapStringSet DeviceTypeIdentifications_; std::vector<std::pair<std::string,std::string>> DeviceTypes_;
DeviceDashboard DB_; DeviceDashboard DB_;
}; };
@@ -63,4 +62,3 @@ namespace OpenWifi {
inline Daemon * Daemon() { return Daemon::instance(); } inline Daemon * Daemon() { return Daemon::instance(); }
} }
#endif //UCENTRAL_UCENTRAL_H

View File

@@ -2,8 +2,7 @@
// Created by stephane bourque on 2021-07-21. // Created by stephane bourque on 2021-07-21.
// //
#ifndef UCENTRALGW_DASHBOARD_H #pragma once
#define UCENTRALGW_DASHBOARD_H
#include "RESTObjects//RESTAPI_GWobjects.h" #include "RESTObjects//RESTAPI_GWobjects.h"
#include "framework/OpenWifiTypes.h" #include "framework/OpenWifiTypes.h"
@@ -21,4 +20,3 @@ namespace OpenWifi {
}; };
} }
#endif // UCENTRALGW_DASHBOARD_H

View File

@@ -10,39 +10,35 @@
#include "Poco/JSON/Parser.h" #include "Poco/JSON/Parser.h"
#include "DeviceRegistry.h" #include "DeviceRegistry.h"
#include "WebSocketServer.h" #include "WS_Server.h"
#include "framework/MicroService.h"
#include "OUIServer.h" #include "OUIServer.h"
namespace OpenWifi { namespace OpenWifi {
int DeviceRegistry::Start() { int DeviceRegistry::Start() {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
Logger_.notice("Starting "); Logger().notice("Starting ");
return 0; return 0;
} }
void DeviceRegistry::Stop() { void DeviceRegistry::Stop() {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
Logger_.notice("Stopping "); Logger().notice("Stopping ");
} }
bool DeviceRegistry::GetStatistics(const std::string &SerialNumber, std::string & Statistics) { bool DeviceRegistry::GetStatistics(uint64_t SerialNumber, std::string & Statistics) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device == Devices_.end()) if(Device == Devices_.end())
return false; return false;
Statistics = Device->second->LastStats; Statistics = Device->second->LastStats;
return true; return true;
} }
void DeviceRegistry::SetStatistics(const std::string &SerialNumber, const std::string &Statistics) { void DeviceRegistry::SetStatistics(uint64_t SerialNumber, const std::string &Statistics) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device != Devices_.end()) if(Device != Devices_.end())
{ {
Device->second->Conn_.LastContact = time(nullptr); Device->second->Conn_.LastContact = time(nullptr);
@@ -50,7 +46,7 @@ namespace OpenWifi {
} }
} }
bool DeviceRegistry::GetState(const std::string &SerialNumber, GWObjects::ConnectionState & State) { bool DeviceRegistry::GetState(uint64_t SerialNumber, GWObjects::ConnectionState & State) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device == Devices_.end()) if(Device == Devices_.end())
@@ -60,7 +56,7 @@ namespace OpenWifi {
return true; return true;
} }
void DeviceRegistry::SetState(const std::string & SerialNumber, GWObjects::ConnectionState & State) { void DeviceRegistry::SetState(uint64_t SerialNumber, const GWObjects::ConnectionState & State) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device != Devices_.end()) if(Device != Devices_.end())
@@ -70,7 +66,7 @@ namespace OpenWifi {
} }
} }
bool DeviceRegistry::GetHealthcheck(const std::string &SerialNumber, GWObjects::HealthCheck & CheckData) { bool DeviceRegistry::GetHealthcheck(uint64_t SerialNumber, GWObjects::HealthCheck & CheckData) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
@@ -81,27 +77,22 @@ namespace OpenWifi {
return false; return false;
} }
void DeviceRegistry::SetHealthcheck(const std::string &SerialNumber, const GWObjects::HealthCheck & CheckData) { void DeviceRegistry::SetHealthcheck(uint64_t SerialNumber, const GWObjects::HealthCheck & CheckData) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device != Devices_.end()) if(Device != Devices_.end())
{ {
Device->second->LastHealthcheck = CheckData; Device->second->LastHealthcheck = CheckData;
} }
} }
std::shared_ptr<DeviceRegistry::ConnectionEntry> DeviceRegistry::Register(const std::string & SerialNumber, WSConnection *Ptr) std::shared_ptr<DeviceRegistry::ConnectionEntry> DeviceRegistry::Register(uint64_t SerialNumber, WSConnection *Ptr, uint64_t & ConnectionId )
{ {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); const auto & E = Devices_[SerialNumber] = std::make_shared<ConnectionEntry>();
if( Device == Devices_.end()) {
auto E = Devices_[SerialNumber] = std::make_shared<ConnectionEntry>();
E->WSConn_ = Ptr; E->WSConn_ = Ptr;
E->Conn_.SerialNumber = SerialNumber;
E->Conn_.LastContact = std::time(nullptr); E->Conn_.LastContact = std::time(nullptr);
E->Conn_.Connected = true ; E->Conn_.Connected = true ;
E->Conn_.UUID = 0 ; E->Conn_.UUID = 0 ;
@@ -110,42 +101,35 @@ namespace OpenWifi {
E->Conn_.TX = 0 ; E->Conn_.TX = 0 ;
E->Conn_.RX = 0; E->Conn_.RX = 0;
E->Conn_.VerifiedCertificate = GWObjects::CertificateValidation::NO_CERTIFICATE; E->Conn_.VerifiedCertificate = GWObjects::CertificateValidation::NO_CERTIFICATE;
ConnectionId = E->ConnectionId = ++Id_;
return E; return E;
} }
else
{
Device->second->WSConn_ = Ptr;
Device->second->Conn_.Connected = true;
Device->second->Conn_.LastContact = std::time(nullptr);
Device->second->Conn_.VerifiedCertificate = GWObjects::CertificateValidation::NO_CERTIFICATE;
return Device->second;
}
}
bool DeviceRegistry::Connected(const std::string & SerialNumber) { bool DeviceRegistry::Connected(uint64_t SerialNumber) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device == Devices_.end()) if(Device == Devices_.end())
return false; return false;
return Device->second->Conn_.Connected; return Device->second->Conn_.Connected;
} }
void DeviceRegistry::UnRegister(const std::string & SerialNumber, WSConnection *Ptr) { void DeviceRegistry::UnRegister(uint64_t SerialNumber, uint64_t ConnectionId) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto It = Devices_.find(SerialNumber);
if(It!=Devices_.end()) {
if(It->second->ConnectionId == ConnectionId)
Devices_.erase(SerialNumber); Devices_.erase(SerialNumber);
} }
}
bool DeviceRegistry::SendFrame(const std::string & SerialNumber, const std::string & Payload) { bool DeviceRegistry::SendFrame(uint64_t SerialNumber, const std::string & Payload) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device!=Devices_.end() && Device->second->WSConn_!= nullptr) { if(Device!=Devices_.end() && Device->second->WSConn_!= nullptr) {
try { try {
return Device->second->WSConn_->Send(Payload); return Device->second->WSConn_->Send(Payload);
} catch (...) { } catch (...) {
Logger_.debug(Poco::format("Could not send data to device '%s'", SerialNumber)); Logger().debug(Poco::format("Could not send data to device '%s'", SerialNumber));
Device->second->Conn_.Address = ""; Device->second->Conn_.Address = "";
Device->second->WSConn_ = nullptr; Device->second->WSConn_ = nullptr;
Device->second->Conn_.Connected = false; Device->second->Conn_.Connected = false;
@@ -155,7 +139,7 @@ namespace OpenWifi {
return false; return false;
} }
void DeviceRegistry::SetPendingUUID(const std::string & SerialNumber, uint64_t PendingUUID) { void DeviceRegistry::SetPendingUUID(uint64_t SerialNumber, uint64_t PendingUUID) {
std::lock_guard Guard(Mutex_); std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber); auto Device = Devices_.find(SerialNumber);
if(Device!=Devices_.end()) { if(Device!=Devices_.end()) {
@@ -163,103 +147,4 @@ namespace OpenWifi {
} }
} }
std::string ComputeCertificateTag( GWObjects::CertificateValidation V) {
switch(V) {
case GWObjects::NO_CERTIFICATE: return "no certificate";
case GWObjects::VALID_CERTIFICATE: return "non TIP certificate";
case GWObjects::MISMATCH_SERIAL: return "serial mismatch";
case GWObjects::VERIFIED: return "verified";
}
return "unknown";
}
const uint64_t SECONDS_MONTH = 30*24*60*60;
const uint64_t SECONDS_WEEK = 7*24*60*60;
const uint64_t SECONDS_DAY = 1*24*60*60;
const uint64_t SECONDS_HOUR = 1*24*60*60;
std::string ComputeUpLastContactTag(uint64_t T1) {
uint64_t T = T1 - std::time(nullptr);
if( T>SECONDS_MONTH) return ">month";
if( T>SECONDS_WEEK) return ">week";
if( T>SECONDS_DAY) return ">day";
if( T>SECONDS_HOUR) return ">hour";
return "now";
}
std::string ComputeSanityTag(uint64_t T) {
if( T==100) return "100%";
if( T>90) return ">90%";
if( T>60) return ">60%";
return "<60%";
}
std::string ComputeUpTimeTag(uint64_t T) {
if( T>SECONDS_MONTH) return ">month";
if( T>SECONDS_WEEK) return ">week";
if( T>SECONDS_DAY) return ">day";
if( T>SECONDS_HOUR) return ">hour";
return "now";
}
std::string ComputeLoadTag(uint64_t T) {
float V=100.0*((float)T/65536.0);
if(V<5.0) return "< 5%";
if(V<25.0) return "< 25%";
if(V<50.0) return "< 50%";
if(V<75.0) return "< 75%";
return ">75%";
}
std::string ComputeFreeMemoryTag(uint64_t Free, uint64_t Total) {
float V = 100.0 * ((float)Free/(float(Total)));
if(V<5.0) return "< 5%";
if(V<25.0) return "< 25%";
if(V<50.0) return "< 50%";
if(V<75.0) return "< 75%";
return ">75%";
}
bool DeviceRegistry::AnalyzeRegistry(GWObjects::Dashboard &D) {
std::lock_guard Guard(Mutex_);
for(auto const &[SerialNumber,Connection]:Devices_) {
Types::UpdateCountedMap(D.status, Connection->Conn_.Connected ? "connected" : "not connected");
Types::UpdateCountedMap(D.vendors, OUIServer()->GetManufacturer(SerialNumber));
Types::UpdateCountedMap(D.certificates, ComputeCertificateTag(Connection->Conn_.VerifiedCertificate));
Types::UpdateCountedMap(D.lastContact, ComputeUpLastContactTag(Connection->Conn_.LastContact));
Types::UpdateCountedMap(D.healths, ComputeSanityTag(Connection->LastHealthcheck.Sanity));
Types::UpdateCountedMap(D.deviceType, Connection->Conn_.Compatible);
if(!Connection->LastStats.empty()) {
Poco::JSON::Parser P;
auto RawObject = P.parse(Connection->LastStats).extract<Poco::JSON::Object::Ptr>();
if(RawObject->has("unit")) {
auto Unit = RawObject->getObject("unit");
if (Unit->has("uptime")) {
Types::UpdateCountedMap(D.upTimes, ComputeUpTimeTag(Unit->get("uptime")));
}
if (Unit->has("memory")) {
auto Memory = Unit->getObject("memory");
uint64_t Free = Memory->get("free");
uint64_t Total = Memory->get("total");
Types::UpdateCountedMap(D.memoryUsed, ComputeFreeMemoryTag(Free, Total));
}
if (Unit->has("load")) {
auto Load = Unit->getArray("load");
Types::UpdateCountedMap(D.load1,
ComputeLoadTag(Load->getElement<uint64_t>(0)));
Types::UpdateCountedMap(D.load5,
ComputeLoadTag(Load->getElement<uint64_t>(1)));
Types::UpdateCountedMap(D.load15,
ComputeLoadTag(Load->getElement<uint64_t>(2)));
}
}
}
}
return false;
}
} // namespace } // namespace

View File

@@ -6,8 +6,7 @@
// Arilia Wireless Inc. // Arilia Wireless Inc.
// //
#ifndef UCENTRAL_UDEVICEREGISTRY_H #pragma once
#define UCENTRAL_UDEVICEREGISTRY_H
#include "Poco/JSON/Object.h" #include "Poco/JSON/Object.h"
@@ -22,44 +21,98 @@ namespace OpenWifi {
class DeviceRegistry : public SubSystemServer { class DeviceRegistry : public SubSystemServer {
public: public:
struct ConnectionEntry { struct ConnectionEntry {
WSConnection *WSConn_; WSConnection * WSConn_ = nullptr;
GWObjects::ConnectionState Conn_; GWObjects::ConnectionState Conn_;
std::string LastStats; std::string LastStats;
GWObjects::HealthCheck LastHealthcheck; GWObjects::HealthCheck LastHealthcheck;
uint64_t ConnectionId=0;
}; };
static DeviceRegistry *instance() { static auto instance() {
static DeviceRegistry *instance_ = new DeviceRegistry; static auto instance_ = new DeviceRegistry;
return instance_; return instance_;
} }
int Start() override; int Start() override;
void Stop() override; void Stop() override;
bool GetStatistics(const std::string &SerialNumber, std::string & Statistics);
void SetStatistics(const std::string &SerialNumber, const std::string &stats);
bool GetState(const std::string & SerialNumber, GWObjects::ConnectionState & State);
void SetState(const std::string & SerialNumber, GWObjects::ConnectionState & State);
bool GetHealthcheck(const std::string &SerialNumber, GWObjects::HealthCheck & CheckData);
void SetHealthcheck(const std::string &SerialNumber, const GWObjects::HealthCheck &H);
std::shared_ptr<ConnectionEntry> Register(const std::string & SerialNumber, WSConnection *);
void UnRegister(const std::string & SerialNumber, WSConnection *);
bool SendCommand(GWObjects::CommandDetails & Command);
bool Connected(const std::string & SerialNumber);
bool SendFrame(const std::string & SerialNumber, const std::string & Payload);
void SetPendingUUID(const std::string & SerialNumber, uint64_t PendingUUID);
bool AnalyzeRegistry(GWObjects::Dashboard &D); inline bool GetStatistics(const std::string &SerialNumber, std::string & Statistics) {
return GetStatistics(Utils::SerialNumberToInt(SerialNumber),Statistics);
}
bool GetStatistics(uint64_t SerialNumber, std::string & Statistics);
inline void SetStatistics(const std::string &SerialNumber, const std::string &Statistics) {
return SetStatistics(Utils::SerialNumberToInt(SerialNumber),Statistics);
}
void SetStatistics(uint64_t SerialNumber, const std::string &stats);
inline bool GetState(const std::string & SerialNumber, GWObjects::ConnectionState & State) {
return GetState(Utils::SerialNumberToInt(SerialNumber), State);
}
bool GetState(uint64_t SerialNumber, GWObjects::ConnectionState & State);
inline void SetState(const std::string & SerialNumber, const GWObjects::ConnectionState & State) {
return SetState(Utils::SerialNumberToInt(SerialNumber), State);
}
void SetState(uint64_t SerialNumber, const GWObjects::ConnectionState & State);
inline bool GetHealthcheck(const std::string &SerialNumber, GWObjects::HealthCheck & CheckData) {
return GetHealthcheck(Utils::SerialNumberToInt(SerialNumber), CheckData);
}
bool GetHealthcheck(uint64_t SerialNumber, GWObjects::HealthCheck & CheckData);
inline void SetHealthcheck(const std::string &SerialNumber, const GWObjects::HealthCheck &H) {
return SetHealthcheck(Utils::SerialNumberToInt(SerialNumber),H);
}
void SetHealthcheck(uint64_t SerialNumber, const GWObjects::HealthCheck &H);
std::shared_ptr<ConnectionEntry> Register(uint64_t SerialNumber, WSConnection *Conn, uint64_t & ConnectionId);
inline void UnRegister(const std::string & SerialNumber, uint64_t ConnectionId) {
return UnRegister(Utils::SerialNumberToInt(SerialNumber),ConnectionId);
}
void UnRegister(uint64_t SerialNumber, uint64_t ConnectionId);
inline bool Connected(const std::string & SerialNumber) {
return Connected(Utils::SerialNumberToInt(SerialNumber));
}
bool Connected(uint64_t SerialNumber);
inline bool SendFrame(const std::string & SerialNumber, const std::string & Payload) {
return SendFrame(Utils::SerialNumberToInt(SerialNumber), Payload);
}
bool SendFrame(uint64_t SerialNumber, const std::string & Payload);
inline void SetPendingUUID(const std::string & SerialNumber, uint64_t PendingUUID) {
return SetPendingUUID(Utils::SerialNumberToInt(SerialNumber), PendingUUID);
}
void SetPendingUUID(uint64_t SerialNumber, uint64_t PendingUUID);
[[nodiscard]] inline std::shared_ptr<ConnectionEntry> GetDeviceConnection(const std::string & SerialNumber) {
return GetDeviceConnection(Utils::SerialNumberToInt(SerialNumber));
}
[[nodiscard]] inline std::shared_ptr<ConnectionEntry> GetDeviceConnection(uint64_t SerialNumber) {
std::lock_guard Guard(Mutex_);
auto Device = Devices_.find(SerialNumber);
if(Device!=Devices_.end() && Device->second->WSConn_!= nullptr) {
return Device->second;
}
return nullptr;
}
private: private:
std::map<std::string,std::shared_ptr<ConnectionEntry>> Devices_; inline static std::atomic_uint64_t Id_=1;
std::map<uint64_t ,std::shared_ptr<ConnectionEntry>> Devices_;
DeviceRegistry() noexcept: DeviceRegistry() noexcept:
SubSystemServer("DeviceRegistry", "DevStatus", "devicestatus") { SubSystemServer("DeviceRegistry", "DevStatus", "devicestatus") {
} }
}; };
inline DeviceRegistry * DeviceRegistry() { return DeviceRegistry::instance(); } inline auto DeviceRegistry() { return DeviceRegistry::instance(); }
} // namespace } // namespace
#endif //UCENTRAL_UDEVICEREGISTRY_H

View File

@@ -29,7 +29,7 @@ namespace OpenWifi {
static const std::string URI_BASE{"/v1/upload/"}; static const std::string URI_BASE{"/v1/upload/"};
int FileUploader::Start() { int FileUploader::Start() {
Logger_.notice("Starting."); Logger().notice("Starting.");
Poco::File UploadsDir(MicroService::instance().ConfigPath("openwifi.fileuploader.path","/tmp")); Poco::File UploadsDir(MicroService::instance().ConfigPath("openwifi.fileuploader.path","/tmp"));
Path_ = UploadsDir.path(); Path_ = UploadsDir.path();
@@ -37,7 +37,7 @@ namespace OpenWifi {
try { try {
UploadsDir.createDirectory(); UploadsDir.createDirectory();
} catch (const Poco::Exception &E) { } catch (const Poco::Exception &E) {
Logger_.log(E); Logger().log(E);
Path_ = "/tmp"; Path_ = "/tmp";
} }
} }
@@ -46,13 +46,13 @@ namespace OpenWifi {
Svr.Address() + ":" + std::to_string(Svr.Port()) + Svr.Address() + ":" + std::to_string(Svr.Port()) +
" key:" + Svr.KeyFile() + " key:" + Svr.KeyFile() +
" cert:" + Svr.CertFile()}; " cert:" + Svr.CertFile()};
Logger_.information(l); Logger().information(l);
auto Sock{Svr.CreateSecureSocket(Logger_)}; auto Sock{Svr.CreateSecureSocket(Logger())};
Svr.LogCert(Logger_); Svr.LogCert(Logger());
if(!Svr.RootCA().empty()) if(!Svr.RootCA().empty())
Svr.LogCas(Logger_); Svr.LogCas(Logger());
auto Params = new Poco::Net::HTTPServerParams; auto Params = new Poco::Net::HTTPServerParams;
Params->setMaxThreads(16); Params->setMaxThreads(16);
@@ -66,10 +66,10 @@ namespace OpenWifi {
} else { } else {
FullName_ = TmpName + URI_BASE ; FullName_ = TmpName + URI_BASE ;
} }
Logger_.information(Poco::format("Uploader URI base is '%s'", FullName_)); Logger().information(Poco::format("Uploader URI base is '%s'", FullName_));
} }
auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new FileUpLoaderRequestHandlerFactory(Logger_), Pool_, Sock, Params); auto NewServer = std::make_unique<Poco::Net::HTTPServer>(new FileUpLoaderRequestHandlerFactory(Logger()), Pool_, Sock, Params);
NewServer->start(); NewServer->start();
Servers_.push_back(std::move(NewServer)); Servers_.push_back(std::move(NewServer));
} }
@@ -81,7 +81,7 @@ namespace OpenWifi {
void FileUploader::reinitialize(Poco::Util::Application &self) { void FileUploader::reinitialize(Poco::Util::Application &self) {
MicroService::instance().LoadConfigurationFile(); MicroService::instance().LoadConfigurationFile();
Logger_.information("Reinitializing."); Logger().information("Reinitializing.");
Stop(); Stop();
Start(); Start();
} }
@@ -144,7 +144,7 @@ namespace OpenWifi {
std::string FinalFileName = FileUploader()->Path() + "/" + UUID_; std::string FinalFileName = FileUploader()->Path() + "/" + UUID_;
Logger_.information(Poco::format("FILE-UPLOADER: uploading trace for %s", FinalFileName)); Logger().information(Poco::format("FILE-UPLOADER: uploading trace for %s", FinalFileName));
Poco::CountingInputStream InputStream(Stream); Poco::CountingInputStream InputStream(Stream);
std::ofstream OutputStream(FinalFileName, std::ofstream::out); std::ofstream OutputStream(FinalFileName, std::ofstream::out);
Poco::StreamCopier::copyStream(InputStream, OutputStream); Poco::StreamCopier::copyStream(InputStream, OutputStream);
@@ -159,7 +159,7 @@ namespace OpenWifi {
} }
return; return;
} catch (const Poco::Exception &E ) { } catch (const Poco::Exception &E ) {
Logger_.log(E); Logger().log(E);
Error_ = std::string("Upload caused an internal error: ") + E.what() ; Error_ = std::string("Upload caused an internal error: ") + E.what() ;
} }
} }
@@ -168,6 +168,7 @@ namespace OpenWifi {
[[nodiscard]] const std::string& Name() const { return Name_; } [[nodiscard]] const std::string& Name() const { return Name_; }
[[nodiscard]] bool Good() const { return Good_; } [[nodiscard]] bool Good() const { return Good_; }
std::string & Error() { return Error_; } std::string & Error() { return Error_; }
inline Poco::Logger & Logger() { return Logger_; }
private: private:
uint64_t Length_=0; uint64_t Length_=0;
@@ -191,7 +192,7 @@ namespace OpenWifi {
void handleRequest(Poco::Net::HTTPServerRequest& Request, Poco::Net::HTTPServerResponse& Response) override void handleRequest(Poco::Net::HTTPServerRequest& Request, Poco::Net::HTTPServerResponse& Response) override
{ {
try { try {
FileUploaderPartHandler partHandler(UUID_,Logger_); FileUploaderPartHandler partHandler(UUID_,Logger());
Poco::Net::HTMLForm form(Request, Request.stream(), partHandler); Poco::Net::HTMLForm form(Request, Request.stream(), partHandler);
@@ -215,12 +216,13 @@ namespace OpenWifi {
} }
catch( const Poco::Exception & E ) catch( const Poco::Exception & E )
{ {
Logger_.warning(Poco::format("Error occurred while performing upload. Error='%s'",E.displayText())); Logger().warning(Poco::format("Error occurred while performing upload. Error='%s'",E.displayText()));
} }
catch( ... ) catch( ... )
{ {
} }
} }
inline Poco::Logger & Logger() { return Logger_; }
private: private:
std::string UUID_; std::string UUID_;
Poco::Logger & Logger_; Poco::Logger & Logger_;
@@ -228,7 +230,7 @@ namespace OpenWifi {
Poco::Net::HTTPRequestHandler *FileUpLoaderRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest & Request) { Poco::Net::HTTPRequestHandler *FileUpLoaderRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest & Request) {
Logger_.debug(Poco::format("REQUEST(%s): %s %s", Utils::FormatIPv6(Request.clientAddress().toString()), Request.getMethod(), Request.getURI())); Logger().debug(Poco::format("REQUEST(%s): %s %s", Utils::FormatIPv6(Request.clientAddress().toString()), Request.getMethod(), Request.getURI()));
// The UUID should be after the /v1/upload/ part... // The UUID should be after the /v1/upload/ part...
auto UUIDLocation = Request.getURI().find_first_of(URI_BASE); auto UUIDLocation = Request.getURI().find_first_of(URI_BASE);
@@ -240,18 +242,18 @@ namespace OpenWifi {
{ {
// make sure we do not allow anyone else to overwrite our file // make sure we do not allow anyone else to overwrite our file
FileUploader()->RemoveRequest(UUID); FileUploader()->RemoveRequest(UUID);
return new FormRequestHandler(UUID,Logger_); return new FormRequestHandler(UUID,Logger());
} }
else else
{ {
Logger_.warning(Poco::format("Unknown UUID=%s",UUID)); Logger().warning(Poco::format("Unknown UUID=%s",UUID));
} }
} }
return nullptr; return nullptr;
} }
void FileUploader::Stop() { void FileUploader::Stop() {
Logger_.notice("Stopping "); Logger().notice("Stopping ");
for( const auto & svr : Servers_ ) for( const auto & svr : Servers_ )
svr->stop(); svr->stop();
Servers_.clear(); Servers_.clear();

View File

@@ -6,8 +6,7 @@
// Arilia Wireless Inc. // Arilia Wireless Inc.
// //
#ifndef UCENTRAL_UFILEUPLOADER_H #pragma once
#define UCENTRAL_UFILEUPLOADER_H
#include "Poco/Net/HTTPRequestHandler.h" #include "Poco/Net/HTTPRequestHandler.h"
#include "Poco/Net/HTTPRequestHandlerFactory.h" #include "Poco/Net/HTTPRequestHandlerFactory.h"
@@ -29,8 +28,8 @@ namespace OpenWifi {
void RemoveRequest(const std::string &UUID); void RemoveRequest(const std::string &UUID);
const std::string & Path() { return Path_; }; const std::string & Path() { return Path_; };
static FileUploader *instance() { static auto instance() {
static FileUploader * instance_ = new FileUploader; static auto instance_ = new FileUploader;
return instance_; return instance_;
} }
@@ -45,7 +44,8 @@ namespace OpenWifi {
uint64_t MaxSize_=10000000; uint64_t MaxSize_=10000000;
explicit FileUploader() noexcept: explicit FileUploader() noexcept:
SubSystemServer("FileUploader", "FILE-UPLOAD", "openwifi.fileuploader") SubSystemServer("FileUploader", "FILE-UPLOAD", "openwifi.fileuploader"),
Pool_("FileUpLoaderPool")
{ {
} }
}; };
@@ -56,11 +56,11 @@ namespace OpenWifi {
Logger_(L){} Logger_(L){}
Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &request) override; Poco::Net::HTTPRequestHandler *createRequestHandler(const Poco::Net::HTTPServerRequest &request) override;
inline Poco::Logger & Logger() { return Logger_; }
private: private:
Poco::Logger & Logger_; Poco::Logger & Logger_;
}; };
inline FileUploader * FileUploader() { return FileUploader::instance(); } inline auto FileUploader() { return FileUploader::instance(); }
} // namespace } // namespace
#endif //UCENTRAL_UFILEUPLOADER_H

Some files were not shown because too many files have changed in this diff Show More