# Deploy with Custom UDF This guide provides instructions for setting up a custom UDF deployment package (UDFs, TICKscripts, models) and `config.json` in **Time Series Analytics Microservice**. ## Configuration - **`config.json`**: - Review the [configuration reference](../wind-turbine-anomaly-detection/index.md#configjson) and update it as needed for your custom UDF deployment package. - **`UDF Deployment Package`**: 1. **`udfs/`**: - Contains Python scripts for UDFs. - If additional Python packages are required, list them in `requirements.txt` using pinned versions. - For detailed instructions on writing UDFs, see the [How to Write a UDF](./write-user-defined-function.md) guide. 2. **`tick_scripts/`**: - Contains TICKscripts for data processing, analytics, and alerts. - More details on writing TICKscripts are available at - Example TICKscript: ```bash dbrp "datain"."autogen" var data0 = stream |from() .database('datain') .retentionPolicy('autogen') .measurement('opcua') @windturbine_anomaly_detector() |alert() .crit(lambda: "anomaly_status" > 0) .message('Anomaly detected: Wind Speed: {{ index .Fields "wind_speed" }}, Grid Active Power: {{ index .Fields "grid_active_power" }}, Anomaly Status: {{ index .Fields "anomaly_status" }}') .mqtt('my_mqtt_broker') .topic('alerts/wind_turbine') .qos(1) |log() .level('INFO') |influxDBOut() .buffer(0) .database('datain') .measurement('opcua') .retentionPolicy('autogen') ``` - Key sections: - **Input**: Fetch data from Telegraf (stream). - **Processing**: Apply UDFs for analytics. - **Alerts**: Configuration for publishing alerts (e.g., MQTT). Refer to the [document](./configure-alerts.md#helm---publish-mqtt-alerts) - **Logging**: Set log levels (`INFO`, `DEBUG`, `WARN`, `ERROR`). - **Output**: Publish processed data. For more details, refer to the [Kapacitor TICK Script Documentation](https://docs.influxdata.com/kapacitor/v1/reference/tick/introduction/). 3. **`models/`**: - Contains model files (e.g., `.pkl`) used by UDF Python scripts. ### Docker Compose Deployment > **Note:** Follow the [Get started](../get-started.md) guide to deploy the `Wind Turbine Anomaly Detection` and `Weld Defect Detection` sample apps. The UDF deployment package (UDFs, TICKscripts, models) and `config.json` for each sample app are uploaded into the Time Series Analytics Microservice container via `edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/Makefile`: - **Wind Turbine Anomaly Detection**: `edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/apps/wind-turbine-anomaly-detection/time-series-analytics-config` - **Weld Defect Detection**: `edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/apps/weld-defect-detection/time-series-analytics-config` To apply changes to the UDF deployment package or `config.json`, update the files at the relevant path above, then follow the steps below to upload the updated package: 1. Create the UDF deployment package tar file: ```sh export SAMPLE_APP="" # Navigate to the directory containing your UDF deployment package files cd edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/apps/${SAMPLE_APP}/time-series-analytics-config/ rm -f ${SAMPLE_APP}.tar tar cf ${SAMPLE_APP}.tar models/ tick_scripts/ udfs/ ``` 2. Upload the UDF deployment package to the Time Series Analytics Microservice: ```sh curl -X POST https://localhost:3000/ts-api/udfs/package -F "file=@${SAMPLE_APP}.tar" -k ``` 3. Upload the `config.json` to activate the custom UDF: ```sh curl -s -X POST https://localhost:3000/ts-api/config \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d @config.json \ -k ``` ### Helm Deployment 1. Update the UDF deployment package by following the instructions in [Configure Time Series Analytics Microservice with Custom UDF Deployment Package](./configure-custom-udf.md#configuration). 2. Install the Helm chart by following [Step 3: Install Helm Charts](../get-started/deploy-with-helm.md#step-3-install-helm-charts). 3. Create the UDF deployment package tar file: ```sh export SAMPLE_APP="" # Navigate to the directory containing your UDF deployment package files cd edge-ai-suites/manufacturing-ai-suite/industrial-edge-insights-time-series/apps/${SAMPLE_APP}/time-series-analytics-config/ rm -f ${SAMPLE_APP}.tar tar cf ${SAMPLE_APP}.tar models/ tick_scripts/ udfs/ ``` 4. Upload the UDF deployment package to the Time Series Analytics Microservice: ```sh curl -X POST https://localhost:30001/ts-api/udfs/package -F "file=@${SAMPLE_APP}.tar" -k ``` 5. Upload the `config.json` to activate the custom UDF: ```sh curl -s -X POST https://localhost:30001/ts-api/config \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -d @config.json \ -k ``` 6. Verify the logs of the Time Series Analytics Microservice: ```sh POD_NAME=$(kubectl get pods -n ts-sample-app -o jsonpath='{.items[*].metadata.name}' | tr ' ' '\n' | grep deployment-time-series-analytics-microservice | head -n 1) kubectl logs -f -n ts-sample-app $POD_NAME ``` For more details, refer to the Time Series Analytics Microservice API documentation on [updating the config](./update-config.md).