Properly indent all source files

This commit is contained in:
2021-01-25 12:34:23 +01:00
parent 2d3782cc82
commit 2f6231a6b5
106 changed files with 5170 additions and 5171 deletions

View File

@ -1,50 +1,50 @@
<p>
Bosch IoT Cloud space where all applications are hosted:
<a href="https://apps.sys.de1.bosch-iot-cloud.com/organizations/b28baba5-f95f-4ce5-bc9c-3f45acd1dfb2">
https://apps.sys.de1.bosch-iot-cloud.com/organizations/b28baba5-f95f-4ce5-bc9c-3f45acd1dfb2
</a><br>
Find the API documentation here:
<a href="https://definma-api.apps.de1.bosch-iot-cloud.com/api-doc/">
https://definma-api.apps.de1.bosch-iot-cloud.com/api-doc/
</a><br>
Admin database management page:
<a href="https://definma-db.apps.de1.bosch-iot-cloud.com/">
https://definma-db.apps.de1.bosch-iot-cloud.com/
</a><br>
Code repository UI
<a href="https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-ui">
https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-ui
</a><br>
Code repository API
<a href="https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-api">
https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-api
</a><br>
Code repository Models
<a href="https://sourcecode.socialcoding.bosch.com/users/poe2rng/repos/definma-models">
https://sourcecode.socialcoding.bosch.com/users/poe2rng/repos/definma-models
</a><br>
Bosch IoT Cloud space where all applications are hosted:
<a href="https://apps.sys.de1.bosch-iot-cloud.com/organizations/b28baba5-f95f-4ce5-bc9c-3f45acd1dfb2">
https://apps.sys.de1.bosch-iot-cloud.com/organizations/b28baba5-f95f-4ce5-bc9c-3f45acd1dfb2
</a><br>
Find the API documentation here:
<a href="https://definma-api.apps.de1.bosch-iot-cloud.com/api-doc/">
https://definma-api.apps.de1.bosch-iot-cloud.com/api-doc/
</a><br>
Admin database management page:
<a href="https://definma-db.apps.de1.bosch-iot-cloud.com/">
https://definma-db.apps.de1.bosch-iot-cloud.com/
</a><br>
Code repository UI
<a href="https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-ui">
https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-ui
</a><br>
Code repository API
<a href="https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-api">
https://sourcecode.socialcoding.bosch.com/users/vle2fe/repos/definma-api
</a><br>
Code repository Models
<a href="https://sourcecode.socialcoding.bosch.com/users/poe2rng/repos/definma-models">
https://sourcecode.socialcoding.bosch.com/users/poe2rng/repos/definma-models
</a><br>
</p>
<p>
All applications are hosted in the bosch IoT Cloud. The API is hosted in a Node.js container, with a bound MongoDB
instance. <br>
The Angular UI is hosted in a staticfile container, serving the built Angular bundle. <br>
Finally any machine learning models are hosted in Python containers.
All applications are hosted in the bosch IoT Cloud. The API is hosted in a Node.js container, with a bound MongoDB
instance. <br>
The Angular UI is hosted in a staticfile container, serving the built Angular bundle. <br>
Finally any machine learning models are hosted in Python containers.
</p>
<h4>Development setup</h4>
<p>
In any case, it is good to have PxProxy working, following the
<a href="https://inside-docupedia.bosch.com/confluence/pages/viewpage.action?pageId=608652557">
Bosch installation guide
</a>. <br>
For pushing to the BIC, you need the CloudFoundry CLI as described in the
<a href="https://inside-docupedia.bosch.com/confluence/display/BICI/Cloud+Foundry+CLI">BIC documentation</a>.
If the the downloaded version of the CLI should not work, there is an old installer with a definitely working version
on the file share in the bin folder.
Please consider that you need to have a login to the BIC and be marked as space developer for the DeFinMa Org. <br>
For front and back end development, you need a
<a href="https://www.mongodb.com/try/download/community">local MongoDB server</a> as well as
<a href="https://nodejs.org/en/">Node.js</a>.
In any case, it is good to have PxProxy working, following the
<a href="https://inside-docupedia.bosch.com/confluence/pages/viewpage.action?pageId=608652557">
Bosch installation guide
</a>. <br>
For pushing to the BIC, you need the CloudFoundry CLI as described in the
<a href="https://inside-docupedia.bosch.com/confluence/display/BICI/Cloud+Foundry+CLI">BIC documentation</a>.
If the the downloaded version of the CLI should not work, there is an old installer with a definitely working version
on the file share in the bin folder.
Please consider that you need to have a login to the BIC and be marked as space developer for the DeFinMa Org. <br>
For front and back end development, you need a
<a href="https://www.mongodb.com/try/download/community">local MongoDB server</a> as well as
<a href="https://nodejs.org/en/">Node.js</a>.
</p>

View File

@ -1,15 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-documentation-architecture',
templateUrl: './documentation-architecture.component.html',
styleUrls: ['./documentation-architecture.component.scss']
selector: 'app-documentation-architecture',
templateUrl: './documentation-architecture.component.html',
styleUrls: ['./documentation-architecture.component.scss']
})
export class DocumentationArchitectureComponent implements OnInit {
constructor() { }
constructor() { }
ngOnInit(): void {
}
ngOnInit(): void {
}
}

View File

@ -1,38 +1,38 @@
<p>
The used database instance is a MongoDB instance running on the BIC, storing all application data.
The admin database management page can be accessed <a href="https://definma-db.apps.de1.bosch-iot-cloud.com/api-doc/">here</a>.
However, it is recommended to use a dedicated MongoDB application for anything apart from a quick look.
The two tested applications are <a href="https://www.mongodb.com/products/compass">MongoDB Compass</a> and
<a href="https://robomongo.org/s">Robo 3T</a> (recommended for trying queries).
The used database instance is a MongoDB instance running on the BIC, storing all application data.
The admin database management page can be accessed <a href="https://definma-db.apps.de1.bosch-iot-cloud.com/api-doc/">here</a>.
However, it is recommended to use a dedicated MongoDB application for anything apart from a quick look.
The two tested applications are <a href="https://www.mongodb.com/products/compass">MongoDB Compass</a> and
<a href="https://robomongo.org/s">Robo 3T</a> (recommended for trying queries).
</p>
<p>
To connect to the BIC instance from your local application follow the
<a href="https://inside-docupedia.bosch.com/confluence/display/BICI/MongoDB+Client+Tool+via+SSH+Tunnel">BIC guide</a>.
<br>
TL;DR:
To connect to the BIC instance from your local application follow the
<a href="https://inside-docupedia.bosch.com/confluence/display/BICI/MongoDB+Client+Tool+via+SSH+Tunnel">BIC guide</a>.
<br>
TL;DR:
</p>
<p>For the first time:</p>
<ul>
<li>cf login</li>
<li>cf enable-ssh definma-api</li>
<li>cf create-service-key definmadb &lt;key name, can be whatever&gt;</li>
<li>cf login</li>
<li>cf enable-ssh definma-api</li>
<li>cf create-service-key definmadb &lt;key name, can be whatever&gt;</li>
</ul>
<p>Every time:</p>
<ul>
<li>cf ssh -L 1120:st0cvm200118.internal-mongodb.de1.bosch-iot-cloud.com:30000 definma-api</li>
<li>
Login into your application with localhost:1120 and use credentials and authentication database from the BIC
(Data can be found at Home &gt; DeFinMa &gt; production &gt; definma-api &gt; Services &gt; dots on the right of definmadb &gt; View Credentials)
</li>
<li>cf ssh -L 1120:st0cvm200118.internal-mongodb.de1.bosch-iot-cloud.com:30000 definma-api</li>
<li>
Login into your application with localhost:1120 and use credentials and authentication database from the BIC
(Data can be found at Home &gt; DeFinMa &gt; production &gt; definma-api &gt; Services &gt; dots on the right of definmadb &gt; View Credentials)
</li>
</ul>
<h4>Backup Instructions</h4>
<p>
For creating a database backup, you must follow the same steps from above (except the last one).
Additionally you need the <a href="https://www.mongodb.com/try/download/database-tools">MongoDB Tools</a> installed.
Extract the ZIP file to a location on your hard drive and launch a Git Bash in that directory.
For creating a database backup, you must follow the same steps from above (except the last one).
Additionally you need the <a href="https://www.mongodb.com/try/download/database-tools">MongoDB Tools</a> installed.
Extract the ZIP file to a location on your hard drive and launch a Git Bash in that directory.
</p>
<p>To back up the database from the BIC:</p>
@ -51,377 +51,377 @@
</pre>
<p>
More information can be found inside the
<a href="https://docs.mongodb.com/database-tools/">documentation</a>. <br>
The BIC service also creates an internal backup, which can be requested to restore, see
<a href="https://inside-docupedia.bosch.com/confluence/pages/viewpage.action?pageId=565402281">MongoDB FAQ</a>
More information can be found inside the
<a href="https://docs.mongodb.com/database-tools/">documentation</a>. <br>
The BIC service also creates an internal backup, which can be requested to restore, see
<a href="https://inside-docupedia.bosch.com/confluence/pages/viewpage.action?pageId=565402281">MongoDB FAQ</a>
</p>
<h4>Database Model</h4>
<app-img-magnifier src="assets/imgs/db_structure_latest.svg" zoom="2" [magnifierSize]="{width: 400, height: 300}"
id="db-structure"></app-img-magnifier>
id="db-structure"></app-img-magnifier>
<h4>Field Reference</h4>
<rb-table class="field-reference">
<tr><th>samples</th><th></th><th>Example</th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63c98d1c020f8cda6e06'</td>
</tr>
<tr>
<td>type</td>
<td>
The material status of the sample, can be either <span class="name">as-delivered/raw</span> or
<span class="name">processed</span>.
</td>
<td>'processed'</td>
</tr>
<tr>
<td>number</td>
<td>The sample number, generated by the server for new samples</td>
<td>'An31'</td>
</tr>
<tr>
<td>color</td>
<td>Sample color</td>
<td>'black'</td>
</tr>
<tr>
<td>batch</td>
<td>Batch number the sample was from</td>
<td>'2264486614'</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr>
<td>condition</td>
<td>sample condition with <span class="name">condition_template</span> reference and all fields defined by the
template</td>
<td>{{'{'}}condition_template: '5f3151b5b8a886007d2de9ed', time in minutes: 30{{'}'}}</td>
</tr>
<tr>
<td>material_id</td>
<td>Reference to the sample material</td>
<td>'5f2e63118d1c020f8cda6a0a'</td>
</tr>
<tr>
<td>note_id</td>
<td>Reference to the sample note</td>
<td>'5f2e63c98d1c020f8cda6e08'</td>
</tr>
<tr>
<td>user_id</td>
<td>Reference to the user who created the sample</td>
<td>'5f294dd4aa9ea5085c7d7315'</td>
</tr>
<tr><th>samples</th><th></th><th>Example</th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63c98d1c020f8cda6e06'</td>
</tr>
<tr>
<td>type</td>
<td>
The material status of the sample, can be either <span class="name">as-delivered/raw</span> or
<span class="name">processed</span>.
</td>
<td>'processed'</td>
</tr>
<tr>
<td>number</td>
<td>The sample number, generated by the server for new samples</td>
<td>'An31'</td>
</tr>
<tr>
<td>color</td>
<td>Sample color</td>
<td>'black'</td>
</tr>
<tr>
<td>batch</td>
<td>Batch number the sample was from</td>
<td>'2264486614'</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr>
<td>condition</td>
<td>sample condition with <span class="name">condition_template</span> reference and all fields defined by the
template</td>
<td>{{'{'}}condition_template: '5f3151b5b8a886007d2de9ed', time in minutes: 30{{'}'}}</td>
</tr>
<tr>
<td>material_id</td>
<td>Reference to the sample material</td>
<td>'5f2e63118d1c020f8cda6a0a'</td>
</tr>
<tr>
<td>note_id</td>
<td>Reference to the sample note</td>
<td>'5f2e63c98d1c020f8cda6e08'</td>
</tr>
<tr>
<td>user_id</td>
<td>Reference to the user who created the sample</td>
<td>'5f294dd4aa9ea5085c7d7315'</td>
</tr>
<tr><th>notes</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70cc'</td>
</tr>
<tr>
<td>comment</td>
<td>General remarks</td>
<td>'stabilized'</td>
</tr>
<tr>
<td>sample_references</td>
<td>Array of references to other samples, each reference containing the referenced <span class="name">sample_id
</span> as well as a <span class="name">relation</span> field describing the relationship</td>
<td>{{'{'}}sample_id: '5f2e63d68d1c020f8cda701c', relation: 'belongs to'{{'}'}}</td>
</tr>
<tr>
<td>custom_fields</td>
<td>Additional information as key value pairs for the sample, making it easier to process this information</td>
<td>{{'{'}}vwz: '0 min'{{'}'}}</td>
</tr>
<tr><th>notes</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70cc'</td>
</tr>
<tr>
<td>comment</td>
<td>General remarks</td>
<td>'stabilized'</td>
</tr>
<tr>
<td>sample_references</td>
<td>Array of references to other samples, each reference containing the referenced <span class="name">sample_id
</span> as well as a <span class="name">relation</span> field describing the relationship</td>
<td>{{'{'}}sample_id: '5f2e63d68d1c020f8cda701c', relation: 'belongs to'{{'}'}}</td>
</tr>
<tr>
<td>custom_fields</td>
<td>Additional information as key value pairs for the sample, making it easier to process this information</td>
<td>{{'{'}}vwz: '0 min'{{'}'}}</td>
</tr>
<tr><th>note_fields</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70ce'</td>
</tr>
<tr>
<td>name</td>
<td>name of the <span class="name">custom_fields</span> key</td>
<td>'test series'</td>
</tr>
<tr>
<td>qty</td>
<td>number of notes with this key</td>
<td>24</td>
</tr>
<tr><th>note_fields</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70ce'</td>
</tr>
<tr>
<td>name</td>
<td>name of the <span class="name">custom_fields</span> key</td>
<td>'test series'</td>
</tr>
<tr>
<td>qty</td>
<td>number of notes with this key</td>
<td>24</td>
</tr>
<tr><th>materials</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70d0'</td>
</tr>
<tr>
<td>name</td>
<td>Trade name of the material</td>
<td>'Ultradur B4300 G6'</td>
</tr>
<tr>
<td>numbers</td>
<td>Bosch material part numbers</td>
<td>['5515753021, '5515753404']</td>
</tr>
<tr>
<td>properties</td>
<td>material class specific properties with <span class="name">material_template</span> reference and all fields
defined by the template</td>
<td>{{'{'}}material_template: '5f2e89874ac96c007fb06e83', mineral: 0, glass_fiber: 30, carbon_fiber: 0{{'}'}}</td>
</tr>
<tr>
<td>group_id</td>
<td>Reference to the material group</td>
<td>'5f2e631191c5d68f8a0708c4'</td>
</tr>
<tr>
<td>supplier_id</td>
<td>Reference to the material supplier</td>
<td>'5f2e631191c5d68f8a0708c7'</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>materials</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63e98d1c020f8cda70d0'</td>
</tr>
<tr>
<td>name</td>
<td>Trade name of the material</td>
<td>'Ultradur B4300 G6'</td>
</tr>
<tr>
<td>numbers</td>
<td>Bosch material part numbers</td>
<td>['5515753021, '5515753404']</td>
</tr>
<tr>
<td>properties</td>
<td>material class specific properties with <span class="name">material_template</span> reference and all fields
defined by the template</td>
<td>{{'{'}}material_template: '5f2e89874ac96c007fb06e83', mineral: 0, glass_fiber: 30, carbon_fiber: 0{{'}'}}</td>
</tr>
<tr>
<td>group_id</td>
<td>Reference to the material group</td>
<td>'5f2e631191c5d68f8a0708c4'</td>
</tr>
<tr>
<td>supplier_id</td>
<td>Reference to the material supplier</td>
<td>'5f2e631191c5d68f8a0708c7'</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>material_groups</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e631291c5d68f8a0708f9'</td>
</tr>
<tr>
<td>name</td>
<td>The chemical material type</td>
<td>'PA66'</td>
</tr>
<tr><th>material_groups</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e631291c5d68f8a0708f9'</td>
</tr>
<tr>
<td>name</td>
<td>The chemical material type</td>
<td>'PA66'</td>
</tr>
<tr><th>material_supplier</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e631991c5d68f8a0709c3'</td>
</tr>
<tr>
<td>name</td>
<td>The material supplier</td>
<td>'BASF'</td>
</tr>
<tr><th>material_supplier</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e631991c5d68f8a0709c3'</td>
</tr>
<tr>
<td>name</td>
<td>The material supplier</td>
<td>'BASF'</td>
</tr>
<tr><th>measurements</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f294d25aa9ea5085c7d7305'</td>
</tr>
<tr>
<td>sample_id</td>
<td>Reference to the sample this measurement belongs to</td>
<td>'5f2e63c98d1c020f8cda6e06'</td>
</tr>
<tr>
<td>measurement_template</td>
<td>Reference to the Template defining the structure of the measurement values</td>
<td>'5f294d25aa9ea5085c7d7305'</td>
</tr>
<tr>
<td>values</td>
<td>Measurement values in defined format</td>
<td>{{'{'}}vn: 100.4{{'}'}}</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>measurements</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f294d25aa9ea5085c7d7305'</td>
</tr>
<tr>
<td>sample_id</td>
<td>Reference to the sample this measurement belongs to</td>
<td>'5f2e63c98d1c020f8cda6e06'</td>
</tr>
<tr>
<td>measurement_template</td>
<td>Reference to the Template defining the structure of the measurement values</td>
<td>'5f294d25aa9ea5085c7d7305'</td>
</tr>
<tr>
<td>values</td>
<td>Measurement values in defined format</td>
<td>{{'{'}}vn: 100.4{{'}'}}</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>&lt;collection&gt;_templates</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63ee8d1c020f8cda7128'</td>
</tr>
<tr>
<td>name</td>
<td>Display name of the template</td>
<td>'spectrum'</td>
</tr>
<tr>
<td>version</td>
<td>Version number of the template</td>
<td>2</td>
</tr>
<tr>
<td>first_id</td>
<td>Reference to the first instance of this template with <span class="name">version</span> number 1</td>
<td>'5f2e89bb4ac96c007fb06e86'</td>
</tr>
<tr>
<td>parameters</td>
<td>Specified parameters of this template. The <span class="name">name</span> property is used as the key in the
document using this template, the range can have the following properties: <span class="name">min</span> specifies
the minimum numeric value, <span class="name">max</span> specifies the maximum numeric value, <span class="name">
values</span> specifies an array of allowed values of this parameter and <span class="name">type: 'array'</span>
specifies that this parameter must be an array</td>
<td></td>
</tr>
<tr><th>&lt;collection&gt;_templates</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63ee8d1c020f8cda7128'</td>
</tr>
<tr>
<td>name</td>
<td>Display name of the template</td>
<td>'spectrum'</td>
</tr>
<tr>
<td>version</td>
<td>Version number of the template</td>
<td>2</td>
</tr>
<tr>
<td>first_id</td>
<td>Reference to the first instance of this template with <span class="name">version</span> number 1</td>
<td>'5f2e89bb4ac96c007fb06e86'</td>
</tr>
<tr>
<td>parameters</td>
<td>Specified parameters of this template. The <span class="name">name</span> property is used as the key in the
document using this template, the range can have the following properties: <span class="name">min</span> specifies
the minimum numeric value, <span class="name">max</span> specifies the maximum numeric value, <span class="name">
values</span> specifies an array of allowed values of this parameter and <span class="name">type: 'array'</span>
specifies that this parameter must be an array</td>
<td></td>
</tr>
<tr><th>users</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63cc8d1c020f8cda6e6a'</td>
</tr>
<tr>
<td>name</td>
<td>The username</td>
<td>'admin'</td>
</tr>
<tr>
<td>email</td>
<td>The user's email address used for password reset</td>
<td>'test@bosch.com'</td>
</tr>
<tr>
<td>location</td>
<td>The abbreviation of the Bosch site of the user</td>
<td>'Rng'</td>
</tr>
<tr>
<td>level</td>
<td>The permission level, can be either <span class="name">read</span>, <span class="name">write</span>,
<span class="name">dev</span> or <span class="name">admin</span>. The exact level permissions can be found at the
<a routerLink="/documentation">general documentation</a></td>
<td></td>
</tr>
<tr>
<td>devices</td>
<td>Array of all spectrum measurement devices the user has access to</td>
<td>['Rng01', 'Rng02']</td>
</tr>
<tr>
<td>pass</td>
<td>The user's password in hashed form using bcrypt</td>
<td>'$2a$10$m8DqvZR3plZEv8EPwPo7Luvyrm/ZQDiPzfBh6bpU/1XFWOGONkJyG'</td>
</tr>
<tr>
<td>key</td>
<td>The API key, generated when the user is created</td>
<td>'5f294dd4aa9ea5085c7d7314'</td>
</tr>
<tr>
<td>models</td>
<td>
Reference to the prediction models the user should have access to. Ignored for <span class="name">dev</span> and
<span class="name">admin</span> as they automatically have access to all models.
</td>
<td>['5f466fb1e566810dd8b3e919', '5f294d8aaa9ea5085c7d730b']</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>users</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63cc8d1c020f8cda6e6a'</td>
</tr>
<tr>
<td>name</td>
<td>The username</td>
<td>'admin'</td>
</tr>
<tr>
<td>email</td>
<td>The user's email address used for password reset</td>
<td>'test@bosch.com'</td>
</tr>
<tr>
<td>location</td>
<td>The abbreviation of the Bosch site of the user</td>
<td>'Rng'</td>
</tr>
<tr>
<td>level</td>
<td>The permission level, can be either <span class="name">read</span>, <span class="name">write</span>,
<span class="name">dev</span> or <span class="name">admin</span>. The exact level permissions can be found at the
<a routerLink="/documentation">general documentation</a></td>
<td></td>
</tr>
<tr>
<td>devices</td>
<td>Array of all spectrum measurement devices the user has access to</td>
<td>['Rng01', 'Rng02']</td>
</tr>
<tr>
<td>pass</td>
<td>The user's password in hashed form using bcrypt</td>
<td>'$2a$10$m8DqvZR3plZEv8EPwPo7Luvyrm/ZQDiPzfBh6bpU/1XFWOGONkJyG'</td>
</tr>
<tr>
<td>key</td>
<td>The API key, generated when the user is created</td>
<td>'5f294dd4aa9ea5085c7d7314'</td>
</tr>
<tr>
<td>models</td>
<td>
Reference to the prediction models the user should have access to. Ignored for <span class="name">dev</span> and
<span class="name">admin</span> as they automatically have access to all models.
</td>
<td>['5f466fb1e566810dd8b3e919', '5f294d8aaa9ea5085c7d730b']</td>
</tr>
<tr>
<td>status</td>
<td>Status of the document, can be either <span class="name">new</span>, <span class="name">validated</span> or
<span class="name">deleted</span>.</td>
<td>'new'</td>
</tr>
<tr><th>models</th><th></th><th></th></tr>
<tr>
<td>group</td>
<td>group the model belongs to</td>
<td>'VN'</td>
</tr>
<tr>
<td>models</td>
<td>models of the group with _id, name and url to the Python endpoint</td>
<td>{{'{'}}_id: '5f466fb1e566810dd8b3e919', name: POM, url: 'http://localhost:9099/test'{{'}'}}</td>
</tr>
<tr><th>models</th><th></th><th></th></tr>
<tr>
<td>group</td>
<td>group the model belongs to</td>
<td>'VN'</td>
</tr>
<tr>
<td>models</td>
<td>models of the group with _id, name and url to the Python endpoint</td>
<td>{{'{'}}_id: '5f466fb1e566810dd8b3e919', name: POM, url: 'http://localhost:9099/test'{{'}'}}</td>
</tr>
<tr><th>model_files</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f294d47aa9ea5085c7d7308'</td>
</tr>
<tr>
<td>name</td>
<td>The name of the model</td>
<td>'humidity-1'</td>
</tr>
<tr>
<td>data</td>
<td>The Python model data in binary format</td>
<td>&lt;binary data&gt;</td>
</tr>
<tr><th>model_files</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f294d47aa9ea5085c7d7308'</td>
</tr>
<tr>
<td>name</td>
<td>The name of the model</td>
<td>'humidity-1'</td>
</tr>
<tr>
<td>data</td>
<td>The Python model data in binary format</td>
<td>&lt;binary data&gt;</td>
</tr>
<tr><th>changelogs</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63cc8d1c020f8cda6e6e'</td>
</tr>
<tr>
<td>action</td>
<td>The URL which invoked the database write access</td>
<td>'POST /material/new'</td>
</tr>
<tr>
<td>collection_name</td>
<td>Collection that was written to</td>
<td>'material_groups'</td>
</tr>
<tr>
<td>conditions</td>
<td>Condition arguments used when accessing the database</td>
<td>{{'{'}}id: '5f2e63118d1c020f8cda6a0a'{{'}'}}</td>
</tr>
<tr>
<td>data</td>
<td>data which was written to the database</td>
<td>{{'{'}}name: 'PBT'{{'}'}}</td>
</tr>
<tr>
<td>user_id</td>
<td>The user that executed this command</td>
<td>'5f2e63118d1c020f8cda6a09'</td>
</tr>
<tr><th>changelogs</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63cc8d1c020f8cda6e6e'</td>
</tr>
<tr>
<td>action</td>
<td>The URL which invoked the database write access</td>
<td>'POST /material/new'</td>
</tr>
<tr>
<td>collection_name</td>
<td>Collection that was written to</td>
<td>'material_groups'</td>
</tr>
<tr>
<td>conditions</td>
<td>Condition arguments used when accessing the database</td>
<td>{{'{'}}id: '5f2e63118d1c020f8cda6a0a'{{'}'}}</td>
</tr>
<tr>
<td>data</td>
<td>data which was written to the database</td>
<td>{{'{'}}name: 'PBT'{{'}'}}</td>
</tr>
<tr>
<td>user_id</td>
<td>The user that executed this command</td>
<td>'5f2e63118d1c020f8cda6a09'</td>
</tr>
<tr><th>help</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63d28d1c020f8cda6f86'</td>
</tr>
<tr>
<td>key</td>
<td>The key used to find the required help text</td>
<td>'/documentation/database'</td>
</tr>
<tr>
<td>level</td>
<td>The minimum level required to read this help</td>
<td>'write'</td>
</tr>
<tr>
<td>text</td>
<td>The actual help text</td>
<td>'This page documents the database.'</td>
</tr>
<tr><th>help</th><th></th><th></th></tr>
<tr>
<td>_id</td>
<td>Automatically generated unique id</td>
<td>'5f2e63d28d1c020f8cda6f86'</td>
</tr>
<tr>
<td>key</td>
<td>The key used to find the required help text</td>
<td>'/documentation/database'</td>
</tr>
<tr>
<td>level</td>
<td>The minimum level required to read this help</td>
<td>'write'</td>
</tr>
<tr>
<td>text</td>
<td>The actual help text</td>
<td>'This page documents the database.'</td>
</tr>
</rb-table>

View File

@ -1,14 +1,14 @@
.field-reference td:nth-child(3) {
font-family: boschmono, monospace;
font-family: boschmono, monospace;
}
span.name {
font-style: italic;
font-style: italic;
}
pre {
padding: 1rem;
color: #212529;
background: #e6e6e6;
white-space: pre-wrap;
padding: 1rem;
color: #212529;
background: #e6e6e6;
white-space: pre-wrap;
}

View File

@ -1,15 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-documentation-database',
templateUrl: './documentation-database.component.html',
styleUrls: ['./documentation-database.component.scss']
selector: 'app-documentation-database',
templateUrl: './documentation-database.component.html',
styleUrls: ['./documentation-database.component.scss']
})
export class DocumentationDatabaseComponent implements OnInit {
constructor() { }
constructor() { }
ngOnInit(): void {
}
ngOnInit(): void {
}
}

View File

@ -1,38 +1,38 @@
<h4>Model file upload</h4>
<p>
Model files have to be saved as a .pkl file in 80_Modelle_BIC. <br>
For upload the upload script has to be opened (can be in every environment). The name of the model file has to be
entered wih the .pkl ending in the first command and without .pkl in the second.
Model files have to be saved as a .pkl file in 80_Modelle_BIC. <br>
For upload the upload script has to be opened (can be in every environment). The name of the model file has to be
entered wih the .pkl ending in the first command and without .pkl in the second.
</p>
<h4 class="space-above">Adding new model scripts</h4>
<p>
Open Spyder in the base environment and open the model.py within.
Open Spyder in the base environment and open the model.py within.
</p>
<ul>
<li>Enter model file name without .pkl in fetchData</li>
<li>Add new prediction function below others</li>
<li>duplicate another @app.route and rename according to desired route name and prediction function name</li>
<li>Enter model file name without .pkl in fetchData</li>
<li>Add new prediction function below others</li>
<li>duplicate another @app.route and rename according to desired route name and prediction function name</li>
</ul>
<h4 class="space-above">Testing locally</h4>
<p>
To test the model Python script locally, you need to execute it in the base environment, in which all necessary
packages have to be installed. Note that Spyder also has to be opened in the base environment.
To test the model Python script locally, you need to execute it in the base environment, in which all necessary
packages have to be installed. Note that Spyder also has to be opened in the base environment.
</p>
<ul>
<li>Open a separate Anaconda Prompt and cd into the definma-UI folder</li>
<li>Adapt the model-mock.json at definma-UI/assets/ and enter the new model URL and name</li>
<li>Execute &quot;python -m http.server&quot; in the Anaconda Prompt</li>
<li>Execute the model.py script in Spyder</li>
<li>Navigate to <a href="http://localhost:8000">http://localhost:8000</a> in the browser</li>
<li>If there are problems with cached data, open the Browser developer console (Ctrl+Shift+I) and tick
&quot;Disable cache&quot; in the Network tab. The console then has to stay open.</li>
<li>Open a separate Anaconda Prompt and cd into the definma-UI folder</li>
<li>Adapt the model-mock.json at definma-UI/assets/ and enter the new model URL and name</li>
<li>Execute &quot;python -m http.server&quot; in the Anaconda Prompt</li>
<li>Execute the model.py script in Spyder</li>
<li>Navigate to <a href="http://localhost:8000">http://localhost:8000</a> in the browser</li>
<li>If there are problems with cached data, open the Browser developer console (Ctrl+Shift+I) and tick
&quot;Disable cache&quot; in the Network tab. The console then has to stay open.</li>
</ul>
<h4 class="space-above">Model script upload</h4>
@ -40,17 +40,17 @@
In the Windows Powershell:
<ul>
<li>cf login (only at the first time)</li>
<li>API endpoint: https://api.sys.de1.bosch-iot-cloud.com</li>
<li>Enter email with .de.bosch.com</li>
<li>Enter BIC password</li>
<li>Select space to upload to (currently 3 - development)</li>
<li>cd into the folder containing the manifest.yaml (here is also model.py)</li>
<li>cf push</li>
<li>cf login (only at the first time)</li>
<li>API endpoint: https://api.sys.de1.bosch-iot-cloud.com</li>
<li>Enter email with .de.bosch.com</li>
<li>Enter BIC password</li>
<li>Select space to upload to (currently 3 - development)</li>
<li>cd into the folder containing the manifest.yaml (here is also model.py)</li>
<li>cf push</li>
</ul>
<p>
After upload the new model details have to be entered in the UI.
After upload the new model details have to be entered in the UI.
</p>

View File

@ -1,15 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-documentation-models',
templateUrl: './documentation-models.component.html',
styleUrls: ['./documentation-models.component.scss']
selector: 'app-documentation-models',
templateUrl: './documentation-models.component.html',
styleUrls: ['./documentation-models.component.scss']
})
export class DocumentationModelsComponent implements OnInit {
constructor() { }
constructor() { }
ngOnInit(): void {
}
ngOnInit(): void {
}
}

View File

@ -1,78 +1,78 @@
<p>
<a [href]="api.hostName + '/static/intro-presentation/index.html'">
View the presentation explaining the main functions
</a><br>
View the <a href="/assets/docs/Veit-Lukas_T3000.pdf">T3000 report</a> and
<a href="/assets/docs/Veit-Lukas_Bachelor-Thesis.pdf">Bachelor Thesis</a> for an in-depth application description.
<a [href]="api.hostName + '/static/intro-presentation/index.html'">
View the presentation explaining the main functions
</a><br>
View the <a href="/assets/docs/Veit-Lukas_T3000.pdf">T3000 report</a> and
<a href="/assets/docs/Veit-Lukas_Bachelor-Thesis.pdf">Bachelor Thesis</a> for an in-depth application description.
</p>
<h4>User levels</h4>
<rb-table>
<tr>
<th></th>
<th>prediction</th>
<th>read</th>
<th>write</th>
<th>dev</th>
<th>admin</th>
</tr>
<tr>
<th>use prediction models</th>
<td>specified ones</td>
<td>specified ones</td>
<td>specified ones</td>
<td>all</td>
<td>all</td>
</tr>
<tr>
<th>read sample data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>add samples/edit own</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>read spectral data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>edit other's data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>maintain templates</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>edit users</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th></th>
<th>prediction</th>
<th>read</th>
<th>write</th>
<th>dev</th>
<th>admin</th>
</tr>
<tr>
<th>use prediction models</th>
<td>specified ones</td>
<td>specified ones</td>
<td>specified ones</td>
<td>all</td>
<td>all</td>
</tr>
<tr>
<th>read sample data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>add samples/edit own</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>read spectral data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>edit other's data</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>maintain templates</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
<tr>
<th>edit users</th>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-abort-frame"></span></td>
<td><span class="rb-ic rb-ic-checkmark-frame"></span></td>
</tr>
</rb-table>

View File

@ -1,17 +1,17 @@
@import "~@inst-iot/bosch-angular-ui-components/styles/variables/colors";
p {
margin-bottom: 20px;
margin-bottom: 20px;
}
img#db-structure {
width: 100%;
width: 100%;
}
.rb-ic-checkmark-frame {
color: $brand-success;
color: $brand-success;
}
.rb-ic-abort-frame {
color: $brand-danger;
color: $brand-danger;
}

View File

@ -3,17 +3,17 @@ import {ApiService} from '../services/api.service';
@Component({
selector: 'app-documentation',
templateUrl: './documentation.component.html',
styleUrls: ['./documentation.component.scss']
selector: 'app-documentation',
templateUrl: './documentation.component.html',
styleUrls: ['./documentation.component.scss']
})
export class DocumentationComponent implements OnInit {
constructor(
public api: ApiService
) { }
constructor(
public api: ApiService
) { }
ngOnInit(): void {
}
ngOnInit(): void {
}
}