From 8f45567c7402f0c16f1f638ee4fa717a03f0e42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furkan=20G=C3=B6ksel?= Date: Fri, 29 Mar 2024 15:56:00 +0300 Subject: [PATCH] Add Mlflow Fingerprint --- .../community/mlflow/app/docker-compose.yaml | 7 + .../updater/community/mlflow/update.sh | 101 ++++ .../updater/community/mlflow/versions.txt | 30 ++ .../web/data/community/mlflow.binproto | 458 ++++++++++++++++++ 4 files changed, 596 insertions(+) create mode 100644 google/fingerprinters/web/scripts/updater/community/mlflow/app/docker-compose.yaml create mode 100755 google/fingerprinters/web/scripts/updater/community/mlflow/update.sh create mode 100644 google/fingerprinters/web/scripts/updater/community/mlflow/versions.txt create mode 100755 google/fingerprinters/web/src/main/resources/fingerprinters/web/data/community/mlflow.binproto diff --git a/google/fingerprinters/web/scripts/updater/community/mlflow/app/docker-compose.yaml b/google/fingerprinters/web/scripts/updater/community/mlflow/app/docker-compose.yaml new file mode 100644 index 000000000..ca5931215 --- /dev/null +++ b/google/fingerprinters/web/scripts/updater/community/mlflow/app/docker-compose.yaml @@ -0,0 +1,7 @@ +version: '2' +services: + mlflow: + image: ghcr.io/mlflow/mlflow:${MLFLOW_VERSION} + ports: + - "5000:5000" + command: sh -c "mlflow server --host 0.0.0.0 --port 5000" diff --git a/google/fingerprinters/web/scripts/updater/community/mlflow/update.sh b/google/fingerprinters/web/scripts/updater/community/mlflow/update.sh new file mode 100755 index 000000000..e0f8900f3 --- /dev/null +++ b/google/fingerprinters/web/scripts/updater/community/mlflow/update.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash + +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +source ../../common.sh + +SCRIPT_PATH="$(cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P)" +# Root path to the web fingerprinter plugin. +PROJECT_ROOT="$(cd -- "${SCRIPT_PATH}/../../../.." >/dev/null 2>&1 ; pwd -P)" +# Path to the configurations for starting a live instance of MLflow. +APP_PATH="${SCRIPT_PATH}/app" +# Path to the temporary data holder. +TMP_DATA="/tmp/mlflow_fingerprints" +# Path to the local git repository for MLflow codebase. +GIT_REPO="${TMP_DATA}/repo" +# Path to the directory of all the updated fingerprints data. +FINGERPRINTS_PATH="${TMP_DATA}/fingerprints" +# Json data of the final result. +JSON_DATA="${FINGERPRINTS_PATH}/fingerprint.json" +# Binary proto data of the final result. +BIN_DATA="${FINGERPRINTS_PATH}/fingerprint.binproto" +# Read all the versions to be fingerprinted. +readarray -t ALL_VERSIONS < "${SCRIPT_PATH}/versions.txt" + +mkdir -p "${FINGERPRINTS_PATH}" + +BINPROTO="${PROJECT_ROOT}/src/main/resources/fingerprinters/web/data/community/mlflow.binproto" + + +StartMLflow() { + local version="$1" + pushd "${APP_PATH}" >/dev/null + MLFLOW_VERSION="${version}" docker-compose up -d + popd >/dev/null +} + +StopMLflow() { + local version="$1" + pushd "${APP_PATH}" >/dev/null + MLFLOW_VERSION="${version}" docker-compose down --volumes --remove-orphans + popd >/dev/null +} + +CreateFingerprintForMLflow() { + local mlflowVersion="$1" + + echo "Fingerprinting MLflow version ${mlflowVersion} ..." + # Start a live instance of MLflow. + StartMLflow "${mlflowVersion}" + + # Arbitrarily chosen so that MLflow is up and running. + echo "Waiting for MLflow ${mlflowVersion} to be ready ..." + sleep 20 + + # Checkout the repository to the correct tag. + checkOutRepo "${GIT_REPO}" "${mlflowVersion}" + + updateFingerprint \ + "mlflow" \ + "${mlflowVersion}" \ + "${FINGERPRINTS_PATH}" \ + "${GIT_REPO}/mlflow" \ + "http://localhost:5000" + + # Stop the live instance of MLflow. + StopMLflow "${mlflowVersion}" +} + +# Convert the existing data file to a human-readable json file. +# convertFingerprint "${BINPROTO}" "${JSON_DATA}" + +# Fetch MLflow codebase. +if [[ ! -d "${GIT_REPO}" ]] ; then + git clone https://github.com/mlflow/mlflow "${GIT_REPO}" +fi + +# Get versions +for mlflow_version in "${ALL_VERSIONS[@]}"; do + CreateFingerprintForMLflow "${mlflow_version}" +done + +convertFingerprint "${JSON_DATA}" "${BIN_DATA}" + +echo "Fingerprint updated for MLflow. Please commit the following file:" +echo " ${BIN_DATA}" +echo "to" +echo " ${BINPROTO}" diff --git a/google/fingerprinters/web/scripts/updater/community/mlflow/versions.txt b/google/fingerprinters/web/scripts/updater/community/mlflow/versions.txt new file mode 100644 index 000000000..850333570 --- /dev/null +++ b/google/fingerprinters/web/scripts/updater/community/mlflow/versions.txt @@ -0,0 +1,30 @@ +v1.30.0 +v2.0.0rc0 +v2.0.0 +v2.0.1 +v2.1.0 +v2.1.1 +v2.2.0 +v2.2.1 +v2.2.2 +v2.3.0 +v2.3.1 +v2.3.2 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0 +v2.7.0 +v2.7.1 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2 +v2.10.0 +v2.10.1 +v2.10.2 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3 diff --git a/google/fingerprinters/web/src/main/resources/fingerprinters/web/data/community/mlflow.binproto b/google/fingerprinters/web/src/main/resources/fingerprinters/web/data/community/mlflow.binproto new file mode 100755 index 000000000..daf3aa259 --- /dev/null +++ b/google/fingerprinters/web/src/main/resources/fingerprinters/web/data/community/mlflow.binproto @@ -0,0 +1,458 @@ + + +mlflowO +)static-files/static/css/main.6d30cbb0.css" + 58777542d3051566d4f847b5813459f3M +'static-files/static/js/main.3fc83bde.js" + d9350c8f4c092ba85a88e64b1554bcefM +'static-files/static/js/main.3241cb2f.js" + 7a165f75977c752c6159a95f2431ae14O +)static-files/static/css/main.c3fe171a.css" + 917733df1cb4d8056f9639fbd70e9370M +'static-files/static/js/main.1208e44c.js" + 88497eadd2eceae6368ef2d64c4db8b3O +)static-files/static/css/main.2a740fb6.css" + 717a38689118b5ee7e18f901476324a8M +'static-files/static/js/main.97a9d480.js" + aa47834480f58f5931abb1ec9c9b2f1c> +static-files/favicon.ico" + 17d430cc5ae66deef9b500a6faec6576M +'static-files/static/js/main.869400b7.js" + 5da1558593204dbc763559c166dd5ad9O +)static-files/static/css/main.fc452620.css" + a5b6759ebe0c46d5ae0d7df3f5395ccaM +'static-files/static/js/main.3f69fad5.js" + 80f2136b701ede50c3cc4ef79d5a9ebfM +'static-files/static/js/main.8f2ec15f.js" + 58839a947656c61cbab9ace4d82194c4M +'static-files/static/js/main.79ae5ec7.js" + fb3948533c6777954ffa641f4cc9a1a6O +)static-files/static/css/main.a8b090b0.css" + c1d296c1949becd8e6c6c99b64a3a368O +)static-files/static/css/main.d432e97f.css" + 5954adf5fa62d1626033eef98135348bM +'static-files/static/js/main.b3b196bf.js" + 4d99e49f9a0f44901fd822f66e4e8554M +'static-files/static/js/main.f119600c.js" + acb78be117bcde9a14d8597c3306eed4M +'static-files/static/js/main.ab8e25f3.js" + 1b1561a0f79a06502378964222c3acfdM +'static-files/static/js/main.4dd3381c.js" + a60f5df7e50ca39f6e3d64cc3dffc202@ +static-files/manifest.json" + 62086d24223bfd1b6f9ee96e2fe508bcO +)static-files/static/css/main.45d71c4b.css" + 52756e150d8f1f516999dda441b95d73M +'static-files/static/js/main.a051daa5.js" + 9c73aa6db5534b284e3041cac53a5a27M +'static-files/static/js/main.a75bee39.js" + 4292313d91fcfc4809bec12f1be57a84M +'static-files/static/js/main.0377a7f9.js" + 4220a28d453f3ebe1354ed069b8f5191M +'static-files/static/js/main.a2d0394f.js" + e1ed5dc20a28212951864560be8161a3M +'static-files/static/js/main.ce94c8c2.js" + 5176b4132bd269a01e137cd35621b18dO +)static-files/static/css/main.3b6f4584.css" + 18da093190fe15b15f7c4c638b1ad084M +'static-files/static/js/main.df57f185.js" + f9e8335314e3a6f4689c984baa1e4ea7M +'static-files/static/js/main.71510886.js" + 14a9a4f714e371c31a1d5272da007424M +'static-files/static/js/main.2d12c0ae.js" + fc382f4d60068406d3b0e63f3af3198eM +'static-files/static/js/main.b49c1c9a.js" + 78ed6bb4369e4b6063413f8cdca2026cO +)static-files/static/css/main.ef33a5e7.css" + da6884c4a83b3f741f3688bed5adb9e2M +'static-files/static/js/main.6125589f.js" + dec6166513b88d5e0b04433dd87ad0ffM +'static-files/static/js/main.803f1727.js" + 4eb173bbfe94cea6a7d37a803a495dc3M +'static-files/static/js/main.80fd8eef.js" + 2a3e4bf7e02f09d13184ad55ef8416bfM +'static-files/static/js/main.9f3548a7.js" + 4d1bf2010713ecc85c07edd45141139dM +'static-files/static/js/main.20598683.js" + 074886975848b4aa61f2b7cec8cf3f25O +)static-files/static/css/main.9b3f40e9.css" + da9e124bc5bf74b1de6fd94fdc697936O +)static-files/static/css/main.9eafd206.css" + 861b9be3c9e22e11e0e01999bc343a2aM +'static-files/static/js/main.77ba8472.js" + 3b44fb327883ff6b4d7544a1746aa10aM +'static-files/static/js/main.0de244d3.js" + ce917b9ad6dcf2065fb5953b22039468M +'static-files/static/js/main.2dfd8740.js" + ea86bca5f2bf9417c8006aa7590079c0M +'static-files/static/js/main.a14f1bf8.js" + e37dff68be4d5f3d782f9faee72f43f88 +" + 18da093190fe15b15f7c4c638b1ad084 +v2.0.0 +v2.0.1. +" + f9e8335314e3a6f4689c984baa1e4ea7 +v2.0.0/ +" + e1ed5dc20a28212951864560be8161a3 +v2.11.2. +" + a60f5df7e50ca39f6e3d64cc3dffc202 +v2.9.2. +" + 2a3e4bf7e02f09d13184ad55ef8416bf +v2.3.1. +" + 9c73aa6db5534b284e3041cac53a5a27 +v2.1.08 +" + 861b9be3c9e22e11e0e01999bc343a2a +v2.7.0 +v2.7.1/ +" + 7a165f75977c752c6159a95f2431ae14 +v2.10.2/ +" + 074886975848b4aa61f2b7cec8cf3f25 +v2.11.1. +" + 5176b4132bd269a01e137cd35621b18d +v2.6.0V +" + 717a38689118b5ee7e18f901476324a8 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0. +" + d9350c8f4c092ba85a88e64b1554bcef +v2.2.2. +" + 4d1bf2010713ecc85c07edd45141139d +v2.9.1. +" + 78ed6bb4369e4b6063413f8cdca2026c +v2.4.1. +" + fb3948533c6777954ffa641f4cc9a1a6 +v2.9.0L +" + 58777542d3051566d4f847b5813459f3 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2. +" + 80f2136b701ede50c3cc4ef79d5a9ebf +v2.2.1/ +" + 3b44fb327883ff6b4d7544a1746aa10a +v2.10.1/ +" + da6884c4a83b3f741f3688bed5adb9e2 +v1.30.0. +" + 4292313d91fcfc4809bec12f1be57a84 +v2.3.0/ +" + ea86bca5f2bf9417c8006aa7590079c0 +v2.10.08 +" + 5954adf5fa62d1626033eef98135348b +v2.1.0 +v2.1.1. +" + aa47834480f58f5931abb1ec9c9b2f1c +v2.7.0. +" + e37dff68be4d5f3d782f9faee72f43f8 +v2.3.2/ +" + ce917b9ad6dcf2065fb5953b22039468 +v1.30.01 +" + da9e124bc5bf74b1de6fd94fdc697936 + v2.0.0rc0. +" + 14a9a4f714e371c31a1d5272da007424 +v2.2.0B +" + a5b6759ebe0c46d5ae0d7df3f5395cca +v2.2.0 +v2.2.1 +v2.2.2B +" + 52756e150d8f1f516999dda441b95d73 +v2.3.0 +v2.3.1 +v2.3.2. +" + 4eb173bbfe94cea6a7d37a803a495dc3 +v2.8.1. +" + fc382f4d60068406d3b0e63f3af3198e +v2.4.2. +" + 58839a947656c61cbab9ace4d82194c4 +v2.4.0. +" + acb78be117bcde9a14d8597c3306eed4 +v2.7.1P +" + c1d296c1949becd8e6c6c99b64a3a368 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3. +" + 4d99e49f9a0f44901fd822f66e4e8554 +v2.1.1. +" + 4220a28d453f3ebe1354ed069b8f5191 +v2.5.0Û +" + 62086d24223bfd1b6f9ee96e2fe508bc +v1.30.0 + v2.0.0rc0 +v2.0.0 +v2.0.1 +v2.1.0 +v2.1.1 +v2.2.0 +v2.2.1 +v2.2.2 +v2.3.0 +v2.3.1 +v2.3.2 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0 +v2.7.0 +v2.7.1 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2 +v2.10.0 +v2.10.1 +v2.10.2 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3E +" + 917733df1cb4d8056f9639fbd70e9370 +v2.10.0 +v2.10.1 +v2.10.2/ +" + 88497eadd2eceae6368ef2d64c4db8b3 +v2.11.0. +" + dec6166513b88d5e0b04433dd87ad0ff +v2.0.11 +" + 1b1561a0f79a06502378964222c3acfd + v2.0.0rc0/ +" + 5da1558593204dbc763559c166dd5ad9 +v2.11.3Û +" + 17d430cc5ae66deef9b500a6faec6576 +v1.30.0 + v2.0.0rc0 +v2.0.0 +v2.0.1 +v2.1.0 +v2.1.1 +v2.2.0 +v2.2.1 +v2.2.2 +v2.3.0 +v2.3.1 +v2.3.2 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0 +v2.7.0 +v2.7.1 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2 +v2.10.0 +v2.10.1 +v2.10.2 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3"S +)static-files/static/css/main.6d30cbb0.css +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2"3 +'static-files/static/js/main.3fc83bde.js +v2.2.2"4 +'static-files/static/js/main.3241cb2f.js +v2.10.2"L +)static-files/static/css/main.c3fe171a.css +v2.10.0 +v2.10.1 +v2.10.2"4 +'static-files/static/js/main.1208e44c.js +v2.11.0"] +)static-files/static/css/main.2a740fb6.css +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0"3 +'static-files/static/js/main.97a9d480.js +v2.7.0"Ñ +static-files/favicon.ico +v1.30.0 + v2.0.0rc0 +v2.0.0 +v2.0.1 +v2.1.0 +v2.1.1 +v2.2.0 +v2.2.1 +v2.2.2 +v2.3.0 +v2.3.1 +v2.3.2 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0 +v2.7.0 +v2.7.1 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2 +v2.10.0 +v2.10.1 +v2.10.2 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3"4 +'static-files/static/js/main.869400b7.js +v2.11.3"I +)static-files/static/css/main.fc452620.css +v2.2.0 +v2.2.1 +v2.2.2"3 +'static-files/static/js/main.3f69fad5.js +v2.2.1"3 +'static-files/static/js/main.8f2ec15f.js +v2.4.0"3 +'static-files/static/js/main.79ae5ec7.js +v2.9.0"W +)static-files/static/css/main.a8b090b0.css +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3"? +)static-files/static/css/main.d432e97f.css +v2.1.0 +v2.1.1"3 +'static-files/static/js/main.b3b196bf.js +v2.1.1"3 +'static-files/static/js/main.f119600c.js +v2.7.1"6 +'static-files/static/js/main.ab8e25f3.js + v2.0.0rc0"3 +'static-files/static/js/main.4dd3381c.js +v2.9.2"Ó +static-files/manifest.json +v1.30.0 + v2.0.0rc0 +v2.0.0 +v2.0.1 +v2.1.0 +v2.1.1 +v2.2.0 +v2.2.1 +v2.2.2 +v2.3.0 +v2.3.1 +v2.3.2 +v2.4.0 +v2.4.1 +v2.4.2 +v2.5.0 +v2.6.0 +v2.7.0 +v2.7.1 +v2.8.1 +v2.9.0 +v2.9.1 +v2.9.2 +v2.10.0 +v2.10.1 +v2.10.2 +v2.11.0 +v2.11.1 +v2.11.2 +v2.11.3"I +)static-files/static/css/main.45d71c4b.css +v2.3.0 +v2.3.1 +v2.3.2"3 +'static-files/static/js/main.a051daa5.js +v2.1.0"3 +'static-files/static/js/main.a75bee39.js +v2.3.0"3 +'static-files/static/js/main.0377a7f9.js +v2.5.0"4 +'static-files/static/js/main.a2d0394f.js +v2.11.2"3 +'static-files/static/js/main.ce94c8c2.js +v2.6.0"? +)static-files/static/css/main.3b6f4584.css +v2.0.0 +v2.0.1"3 +'static-files/static/js/main.df57f185.js +v2.0.0"3 +'static-files/static/js/main.71510886.js +v2.2.0"3 +'static-files/static/js/main.2d12c0ae.js +v2.4.2"3 +'static-files/static/js/main.b49c1c9a.js +v2.4.1"6 +)static-files/static/css/main.ef33a5e7.css +v1.30.0"3 +'static-files/static/js/main.6125589f.js +v2.0.1"3 +'static-files/static/js/main.803f1727.js +v2.8.1"3 +'static-files/static/js/main.80fd8eef.js +v2.3.1"3 +'static-files/static/js/main.9f3548a7.js +v2.9.1"4 +'static-files/static/js/main.20598683.js +v2.11.1"8 +)static-files/static/css/main.9b3f40e9.css + v2.0.0rc0"? +)static-files/static/css/main.9eafd206.css +v2.7.0 +v2.7.1"4 +'static-files/static/js/main.77ba8472.js +v2.10.1"4 +'static-files/static/js/main.0de244d3.js +v1.30.0"4 +'static-files/static/js/main.2dfd8740.js +v2.10.0"3 +'static-files/static/js/main.a14f1bf8.js +v2.3.2 \ No newline at end of file