From 09fddb989b0dddde282c2dc66ad715566d4a7fce Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Tue, 7 May 2024 20:51:07 +0200 Subject: [PATCH 01/22] Added inital kind of working version of the gitlab-pages packages for TALP --- .gitignore | 3 +- example_files/talp/TALP.db | Bin 0 -> 28672 bytes example_files/talp/latest_talp_run.json | 1 + index.html | 22 + parallel_effiency.svg | 1 + poetry.lock | 449 ++++++++++++++++++++ pyproject.toml | 23 +- report.html | 377 ++++++++++++++++ report_ts.html | 325 ++++++++++++++ talp_pages/__init__.py | 0 talp_pages/download_artifacts.py | 90 ++++ talp_pages/talp_add_to_db.py | 97 +++++ talp_pages/talp_badge.py | 93 ++++ talp_pages/talp_common.py | 33 ++ talp_pages/talp_pages.py | 108 +++++ talp_pages/talp_report.py | 82 ++++ talp_pages/talp_report_ts.py | 150 +++++++ talp_pages/templates/talp_index_page.jinja | 22 + talp_pages/templates/talp_report.jinja | 135 ++++++ talp_pages/templates/talp_time_series.jinja | 325 ++++++++++++++ 20 files changed, 2333 insertions(+), 3 deletions(-) create mode 100644 example_files/talp/TALP.db create mode 100644 example_files/talp/latest_talp_run.json create mode 100644 index.html create mode 100644 parallel_effiency.svg create mode 100644 poetry.lock create mode 100644 report.html create mode 100644 report_ts.html mode change 100644 => 100755 talp_pages/__init__.py create mode 100755 talp_pages/download_artifacts.py create mode 100755 talp_pages/talp_add_to_db.py create mode 100755 talp_pages/talp_badge.py create mode 100644 talp_pages/talp_common.py create mode 100755 talp_pages/talp_pages.py create mode 100755 talp_pages/talp_report.py create mode 100755 talp_pages/talp_report_ts.py create mode 100644 talp_pages/templates/talp_index_page.jinja create mode 100644 talp_pages/templates/talp_report.jinja create mode 100644 talp_pages/templates/talp_time_series.jinja diff --git a/.gitignore b/.gitignore index f5e96db..ce63e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -venv \ No newline at end of file +venv +dist \ No newline at end of file diff --git a/example_files/talp/TALP.db b/example_files/talp/TALP.db new file mode 100644 index 0000000000000000000000000000000000000000..c1a51109b44330e4d22f7697b018609d8cf8a1c2 GIT binary patch literal 28672 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 + + + + + + + + + + TALP Pages + + +

Welcome to the TALP Pages landing page

+ + + + + + + + \ No newline at end of file diff --git a/parallel_effiency.svg b/parallel_effiency.svg new file mode 100644 index 0000000..6937316 --- /dev/null +++ b/parallel_effiency.svg @@ -0,0 +1 @@ +Parallel efficiency: 0.44Parallel efficiency0.44 \ No newline at end of file diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..a2c8359 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,449 @@ +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. + +[[package]] +name = "certifi" +version = "2024.2.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "markupsafe" +version = "2.1.5" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, +] + +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-gitlab" +version = "4.4.0" +description = "A python wrapper for the GitLab API" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "python-gitlab-4.4.0.tar.gz", hash = "sha256:1d117bf7b433ae8255e5d74e72c660978f50ee85eb62248c9fb52ef43c3e3814"}, + {file = "python_gitlab-4.4.0-py3-none-any.whl", hash = "sha256:cdad39d016f59664cdaad0f878f194c79cb4357630776caa9a92c1da25c8d986"}, +] + +[package.dependencies] +requests = ">=2.25.0" +requests-toolbelt = ">=0.10.1" + +[package.extras] +autocompletion = ["argcomplete (>=1.10.0,<3)"] +yaml = ["PyYaml (>=6.0.1)"] + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "urllib3" +version = "2.2.1" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, + {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.9" +content-hash = "8278a0a9080a212e794fe707988533614136c4f682b543ae7d4310053029cc09" diff --git a/pyproject.toml b/pyproject.toml index f99b18a..6679501 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,32 @@ [tool.poetry] name = "talp-pages" version = "0.0.1" -description = "" +description = "Command line tools to generate performance reports using the TALP module of DLB" authors = ["Valentin Seitz "] +maintainers = ["Valentin Seitz "] readme = "README.md" +license = "GPL-3.0-only" +keywords = ["HPC", "Performance Analysis","Profiling","Continuous Performance Analysis"] + + +include = [ + "talp_pages/templates/*.jinja" +] [tool.poetry.dependencies] -python = "^3.4" +python = "^3.9" +python-gitlab = "^4.4.0" +jinja2 = "^3.1.4" +pandas = "^2.2.2" + +[tool.poetry.scripts] +talp_add_to_db = 'talp_pages.talp_add_to_db:main' +talp_report = 'talp_pages.talp_report:main' +talp_badge = 'talp_pages.talp_badge:main' +talp_report_ts = 'talp_pages.talp_report_ts:main' +talp_pages = 'talp_pages.talp_pages:main' +talp_download_artifacts = 'talp_pages.download_artifacts:main' [build-system] requires = ["poetry-core"] diff --git a/report.html b/report.html new file mode 100644 index 0000000..cb92652 --- /dev/null +++ b/report.html @@ -0,0 +1,377 @@ + + + + + + DLB-TALP Performance Report + + + + + + + + + + + + + + +
+ DLB Logo +
+ +

Performance Report

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElapsed Time [s]Average IPCParallel EfficiencyCommunication EfficiencyLoad BalanceLB InLB Out
MPI Execution272.5552771681.06386296338565580.443294740883413530.981.01.01.0
add0.8836436650.159414051799021460.88604231904107361.01.01.01.0
calc_c21.1663525883.49408843894573231.3952653081276060.981.01.01.0
calc_a1.3830026540.55695582637792431.32990918578874861.01.01.01.0
calc_b79.9495026632.49276189359339061.33354374003258581.01.01.01.0
copy0.2154648840.2754830399598540.96148435623130781.01.01.01.0
exchange6.5538646292.86471429214151830.38884340618274810.471.01.01.0
file_io4.5417653411.9942824128114480.80744042547253570.971.01.01.0
app242.5842212023.1328347988778181.13966453362175260.981.01.01.0
initialize58.3605629812.3653078985145891.4093736518860271.01.01.01.0
initialize_mesh23.834707594.090710065570.77768726420305841.01.01.01.0
initialize_timestep13.727230222.1702458149530071.1754613412059281.01.01.01.0
lin_comb0.7284357560.359281699764108340.85696761047921491.01.01.01.0
mpi_allreduce0.6725349980.118031659017079280.00.01.01.01.0
calc_d16.7022252463.73392878059145830.83630658712181051.01.01.01.0
calc_e0.8301619991.58994176437024430.7567555344950320.661.01.01.0
calc_f0.9859138481.7383930441981590.89695470403381840.771.01.01.0
calc_g1.8836925321.12607898583952480.71294780465767530.911.01.01.0
calc_h1.90036440.58851225352357030.82542509670884461.01.01.01.0
calc_i66.3226856982.7729353385437881.08128814874758721.01.01.01.0
calc_j11.103086492.53859790864668880.96347423700205351.01.01.01.0
calc_k4.9479018923.46049968809908971.12566519353254571.01.01.01.0
calc_l15.8021144321.4806023483337231.29268443836410961.01.01.01.0
+ +

Metrics overview

+ For up to date overview of the computed metrics you can consult the
DLB User Guide + The coloring above follows the following rules: + + + + + + + + + + + + + + + + + + + + + +
Average IPCParallel Efficiency
< 1 < 0.6
> 1
< 2
> 0.6
< 0.8
> 2 > 0.8
+
+ ©2023-2024, Barcelona Supercomputing Center +
+ + \ No newline at end of file diff --git a/report_ts.html b/report_ts.html new file mode 100644 index 0000000..7753d0a --- /dev/null +++ b/report_ts.html @@ -0,0 +1,325 @@ + + + + + + Your Website + + + + + + + + + + +
+
+

Continous performance analysis results

+

for GENEX on RAVEN

+
+
+ + +
+
+
+

Select Regions

+
+
+
+ +
+
+
+
+

Elapsed Time

+
+
+
+

Parallel Efficiency

+
+
+
+

Average IPC

+
+
+
+ +
+ + +
+
+

© 2024 BSC (BEPPP). All rights reserved.

+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/talp_pages/__init__.py b/talp_pages/__init__.py old mode 100644 new mode 100755 diff --git a/talp_pages/download_artifacts.py b/talp_pages/download_artifacts.py new file mode 100755 index 0000000..7b563d1 --- /dev/null +++ b/talp_pages/download_artifacts.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +import os +import argparse +import gitlab +import logging + +""" + Script to automagically choose a suitable authentication method and download the .zip archive of the last sucessfull + execution of that jobname on the branch: ref-name + Requires python-gitlab to be installed + + Default behaviour: create empty zip file +""" + + +def download_artifacts(gl, project_name, job_name, ref_name, gitlab_token=None, output_file=None): + try: + project = gl.projects.get(project_name) + except gitlab.exceptions.GitlabGetError as e: + logging.error("Failed to get project details: %s", str(e)) + return + + logging.debug("Found project ID: %s", project.id) + + # Get artifacts for the job + try: + artifacts_file = project.artifacts.download( + ref_name=ref_name, job=job_name.strip()) + logging.info("Artifacts downloaded successfully: %s", output_file) + except Exception as e: + logging.critical( + "Wasnt able to download artifacts, continue with a empty zip directory") + artifacts_file = b'PK\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + + with open(output_file, 'wb') as f: + f.write(artifacts_file) + + +def main(): + parser = argparse.ArgumentParser( + description="Download artifacts from the latest successful GitLab CI job") + parser.add_argument( + "--gitlab-url", help="GitLab URL (the thing before /api/*)", required=True) + parser.add_argument( + "--project-name", help="GitLab project name (format: namespace/project)", required=True) + parser.add_argument( + "--job-name", help="Name of the GitLab CI job from which to download the artifact", required=True) + parser.add_argument( + "--output-file", help="Output file name for downloaded artifacts", required=True) + parser.add_argument( + "--ref-name", help="GitLab branch name", default="main") + parser.add_argument( + "--gitlab-token", help="Personal GitLab access token (if not specified it will try to use a job_token)") + parser.add_argument( + "--log-level", help="Logging level (DEBUG, INFO, WARNING, ERROR)", default="INFO") + + args = parser.parse_args() + + log_level = getattr(logging, args.log_level.upper(), None) + if not isinstance(log_level, int): + raise ValueError("Invalid log level: %s" % args.log_level) + + logging.basicConfig(level=log_level) + job_gitlab_token = None + gitlab_token = None + + if args.gitlab_token: + gitlab_token = args.gitlab_token + else: + job_gitlab_token = os.getenv("CI_JOB_TOKEN") + print(job_gitlab_token) + logging.debug("Using the CI_JOB_TOKEN variant") + + gl = None + if gitlab_token: + gl = gitlab.Gitlab(args.gitlab_url, private_token=gitlab_token) + gl.auth() + elif job_gitlab_token: + gl = gitlab.Gitlab(args.gitlab_url, job_token=job_gitlab_token) + logging.debug("Using the CI_JOB_TOKEN variant") + else: + gl = gitlab.Gitlab(args.gitlab_url) + + download_artifacts(gl, args.project_name, args.job_name, + args.ref_name, args.gitlab_token, args.output_file,) + + +if __name__ == "__main__": + main() diff --git a/talp_pages/talp_add_to_db.py b/talp_pages/talp_add_to_db.py new file mode 100755 index 0000000..07b3295 --- /dev/null +++ b/talp_pages/talp_add_to_db.py @@ -0,0 +1,97 @@ +# myapp/app.py +import argparse +import json +import os + +from datetime import datetime +import sqlite3 +import logging +from .talp_common import TALP_TABLE_NAME, TALP_TABLE_COLUMNS_WITH_DATATYPES, TALP_TABLE_COLUMNS + + +# Function to insert data into the SQLite database +def insert_data(conn, timestamp, talp_output, metadata): + # Connect to the SQLite database + cursor = conn.cursor() + + try: + # Create a table if it doesn't exist + cursor.execute( + f"CREATE TABLE IF NOT EXISTS {TALP_TABLE_NAME} {TALP_TABLE_COLUMNS_WITH_DATATYPES}") + + # Create an index on the timestamp column + cursor.execute( + f"CREATE INDEX IF NOT EXISTS idx_timestamp ON {TALP_TABLE_NAME} (timestamp)") + + # Convert JSON objects to string format + + # Insert data into the table + cursor.execute(f"INSERT INTO {TALP_TABLE_NAME} {TALP_TABLE_COLUMNS} VALUES (?, ?, ?)", ( + timestamp, json.dumps(talp_output), json.dumps(metadata))) + + # Commit changes and close the connection + conn.commit() + logging.debug("Data inserted successfully") + except sqlite3.Error as e: + logging.critical("ERROR inserting data:", e) + finally: + # Close the connection + conn.close() + + +def main(): + # Parse command-line arguments + parser = argparse.ArgumentParser( + description='Add talp.json to the local time series database') + parser.add_argument('-i', '--input', dest='talp', + help='talp.json file to be added', required=True) + parser.add_argument('-m', '--metadata', dest='metadata', + help='metadata.json file to be added', required=False) + parser.add_argument('-db', '--database', dest='database', + help='TALP.db file. If not specified a new one will be generated', required=False) + # TODO add timestamp mechanism + args = parser.parse_args() + + # Check if the JSON file exists + if not os.path.exists(args.talp): + logging.error(f"The specified JSON file '{args.talp}' does not exist.") + return + + if args.metadata: + if not os.path.exists(args.metadata): + logging.error( + f"The specified JSON file '{args.metadata}' does not exist.") + return + + # Set output + if args.database: + DB_FILE = args.database + else: + DB_FILE = "TALP.db" + + # Connect to database + conn = sqlite3.connect(DB_FILE) + + current_timestamp = datetime.now() + + with open(args.talp, 'r') as json_file: + try: + talp_output = json.load(json_file) + except json.JSONDecodeError as e: + logging.error(f"Error decoding JSON: {e}") + return + if args.metadata: + with open(args.metadata, 'r') as json_file: + try: + metadata = json.load(json_file) + except json.JSONDecodeError as e: + logging.error(f"Error decoding JSON: {e}") + return + else: + metadata = {} + + insert_data(conn, current_timestamp, talp_output, metadata) + + +if __name__ == "__main__": + main() diff --git a/talp_pages/talp_badge.py b/talp_pages/talp_badge.py new file mode 100755 index 0000000..5e0158a --- /dev/null +++ b/talp_pages/talp_badge.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +import argparse +import json +import os +from urllib.request import urlopen, Request +import logging +from .talp_common import TALP_POP_METRICS_KEY,TALP_DEFAULT_REGION_NAME + +class TalpBadge: + def __init__(self, talp_file): + # Now directly try to create a connection + with open(talp_file, 'r') as json_file: + # dont catch exception, but fail + self.raw_data = json.load(json_file) + + logging.debug(f"Created TalpReport and read the json: {self.raw_data}") + # do some sanity checks + if not self.raw_data[TALP_POP_METRICS_KEY]: + logging.error(f"No {TALP_POP_METRICS_KEY} found in {talp_file}. Try re-running DLB with arguments --talp --talp-summary=pop-metrics --talp-file={talp_file}") + raise Exception(f"No {TALP_POP_METRICS_KEY} found") + + def get_badge_svg(self): + + parallel_efficiency = None + pop_metric_regions = self.raw_data[TALP_POP_METRICS_KEY] + for region in pop_metric_regions: + if region['name'] == TALP_DEFAULT_REGION_NAME: + parallel_efficiency = region['parallelEfficiency'] + + + if not parallel_efficiency: + raise Exception(f"Could not find {TALP_DEFAULT_REGION_NAME} in provided json") + + parallel_efficiency = round(parallel_efficiency, 2) + + if parallel_efficiency < 0.6: + bagde_url = f"https://img.shields.io/badge/Parallel_efficiency-{parallel_efficiency}-red" + elif parallel_efficiency < 0.8: + bagde_url = f"https://img.shields.io/badge/Parallel_efficiency-{parallel_efficiency}-orange" + else: + bagde_url = f"https://img.shields.io/badge/Parallel_efficiency-{parallel_efficiency}-green" + + return urlopen(Request(url=bagde_url, headers={'User-Agent': 'Mozilla'})).read() + + + +def _validate_inputs(args): + output_file=None + input_file=None + # Check if the JSON file exists + if not os.path.exists(args.input): + raise Exception( + f"Error: The specified JSON file '{args.json_file}' does not exist.") + else: + input_file= args.input + # Set output + if args.output: + output_file = args.output + if not args.output.endswith('.svg'): + output_file += ".svg" + logging.info(f"Appending .svg to '{args.output}'") + # Check if the HTML file exists + if os.path.exists(args.output): + logging.info(f"Overwriting '{args.output}'") + else: + output_file = args.input.replace(".json", "") + output_file += ".svg" + + return output_file,input_file + +def main(): + # Parse command-line arguments + parser = argparse.ArgumentParser( + description='Render a SVG badge that can be used in pipelines using shields.io. Therefore internet access is required') + parser.add_argument('-i', '--input', dest='input', help='Path to the TALP JSON file') + parser.add_argument('-o', '--output', dest='output', + help='Name of the svg file beeing generated. If not specified [input].svg will be chosen', required=False) + args = parser.parse_args() + + + output_file,input_file = _validate_inputs(args) + badge = TalpBadge(input_file) + rendered_svg = badge.get_badge_svg() + with open(output_file, 'wb') as f: + f.write(rendered_svg) + + + + + +if __name__ == "__main__": + main() diff --git a/talp_pages/talp_common.py b/talp_pages/talp_common.py new file mode 100644 index 0000000..49f347e --- /dev/null +++ b/talp_pages/talp_common.py @@ -0,0 +1,33 @@ +""" +File declaring some global scoped variables we rely to be there in our scrips +""" +import pathlib +from jinja2 import Environment, FileSystemLoader + +TALP_TABLE_NAME = "talp_data" +TALP_DB_COLUMN_TALP_OUPUT = "talp_ouput" +TALP_DB_COLUMN_TIMESTAMP = "timestamp" +TALP_DB_COLUMN_METADATA = "metadata" +TALP_DEFAULT_REGION_NAME = "MPI Execution" +TALP_POP_METRICS_KEY = 'popMetrics' + +TALP_TEMPLATE_PATH = pathlib.Path(__file__).parent.joinpath('templates').resolve() +TALP_TABLE_COLUMNS_WITH_DATATYPES = f"({TALP_DB_COLUMN_TIMESTAMP} TIMESTAMP, {TALP_DB_COLUMN_TALP_OUPUT} TEXT, {TALP_DB_COLUMN_METADATA} TEXT)" +TALP_TABLE_COLUMNS = f"({TALP_DB_COLUMN_TIMESTAMP} ,{TALP_DB_COLUMN_TALP_OUPUT}, {TALP_DB_COLUMN_METADATA})" + +TALP_PAGES_SITE = 'report.html' +TALP_PAGES_TIME_SERIES_SITE='report_ts.html' +TALP_PAGES_INDEX_PAGE='index.html' +TALP_PAGES_BAGDE='parallel_effiency.svg' + +def render_template(directory, template_name, **context): + # Set up Jinja2 environment and load the template + env = Environment(loader=FileSystemLoader(directory)) + template = env.get_template(template_name) + + # Render the template with the provided context + return template.render(context) + + +def date_time_to_string(datetime): + return datetime.strftime("%d.%m.%Y %H:%M") diff --git a/talp_pages/talp_pages.py b/talp_pages/talp_pages.py new file mode 100755 index 0000000..0869b38 --- /dev/null +++ b/talp_pages/talp_pages.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python + +import argparse +import os +import logging + +from .talp_common import TALP_PAGES_INDEX_PAGE, TALP_PAGES_SITE, TALP_PAGES_TIME_SERIES_SITE, TALP_PAGES_BAGDE, render_template, TALP_TEMPLATE_PATH +from .talp_badge import TalpBadge +from .talp_report import TalpReport +from .talp_report_ts import TalpTimeSeriesReport + +class TalpIndexPage: + def __init__(self,report,report_ts,badge): + self.report=report + self.report_ts=report_ts + self.badge = badge + + + def get_html(self): + return render_template( + TALP_TEMPLATE_PATH, + 'talp_index_page.jinja', + report=self.report, + report_ts=self.report_ts, + badge=self.badge, + ) + + + + + + + + + + +def _verify_input(args): + json_file = None + db_file = None + prefix = None + + # Check if the JSON file exists + if not os.path.exists(args.json_input): + logging.error( + f"The specified JSON file '{args.json_input}' does not exist.") + raise Exception("Not existing input file") + else: + json_file = args.json_input + + # Check if the SQLITE file exists + if not os.path.exists(args.db_input): + logging.error( + f"The specified SQLITE file '{args.db_input}' does not exist.") + raise Exception("Not existing input file") + else: + db_file = args.db_input + + + prefix = args.prefix + + return json_file,db_file,prefix + +def main(): + + def _add_prefix(pref,inp)->str: + if pref: + return pref + "_" + inp + else: + return inp + + # Creating the main argument parser + parser = argparse.ArgumentParser(description='Render the complete static html pages including a index page.' ) + # Adding argument for JSON file + parser.add_argument('-j', '--json', dest='json_input', help='Path to the TALP JSON file') + # Adding argument for DB file + parser.add_argument('-d', '--db', dest='db_input', help='Path to the TALP.db file') + # Adding argument for prefix + parser.add_argument('-p', '--prefix', dest='prefix', help=f"Prefix used in front of the (_){TALP_PAGES_SITE}, (_){TALP_PAGES_TIME_SERIES_SITE} and (_){TALP_PAGES_INDEX_PAGE}", required=False) + + # Parsing arguments + args = parser.parse_args() + + json_file,db_file,prefix = _verify_input(args) + + ouput_report_ts=_add_prefix(prefix,TALP_PAGES_TIME_SERIES_SITE) + ouput_report=_add_prefix(prefix,TALP_PAGES_SITE) + badge_file=_add_prefix(prefix,TALP_PAGES_BAGDE) + ouput_index=_add_prefix(prefix,TALP_PAGES_INDEX_PAGE) + + index = TalpIndexPage(ouput_report,ouput_report_ts,badge_file) + report_ts= TalpTimeSeriesReport(db_file) + report = TalpReport(json_file) + bagde = TalpBadge(json_file) + + with open(ouput_index, 'w') as f: + f.write(index.get_html()) + + with open(ouput_report_ts, 'w') as f: + f.write(report_ts.get_html()) + + with open(ouput_report, 'w') as f: + f.write(report.get_html()) + + with open(badge_file, 'wb') as f: + f.write(bagde.get_badge_svg()) + + + diff --git a/talp_pages/talp_report.py b/talp_pages/talp_report.py new file mode 100755 index 0000000..fb9af40 --- /dev/null +++ b/talp_pages/talp_report.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import argparse +import json +import os +from urllib.request import urlopen, Request +import logging +from .talp_common import TALP_TEMPLATE_PATH,render_template,TALP_POP_METRICS_KEY + +class TalpReport: + def __init__(self, talp_file): + # Now directly try to create a connection + with open(talp_file, 'r') as json_file: + # dont catch exception, but fail + self.raw_data = json.load(json_file) + + logging.debug(f"Created TalpReport and read the json: {self.raw_data}") + # do some sanity checks + if not self.raw_data[TALP_POP_METRICS_KEY]: + logging.error(f"No {TALP_POP_METRICS_KEY} found in {talp_file}. Try re-running DLB with arguments --talp --talp-summary=pop-metrics --talp-file={talp_file}") + raise Exception(f"No {TALP_POP_METRICS_KEY} found") + + + def get_html(self): + pop_metric_regions = self.raw_data[TALP_POP_METRICS_KEY] + # Render the template with the data + return render_template( + TALP_TEMPLATE_PATH, 'talp_report.jinja', regions=pop_metric_regions) + + + +def _validate_inputs(args): + output_file=None + input_file=None + # Check if the JSON file exists + if not os.path.exists(args.input): + raise Exception( + f"Error: The specified JSON file '{args.json_file}' does not exist.") + else: + input_file= args.input + + + # Set output + if args.output: + output_file = args.output + if not args.output.endswith('.html'): + output_file += ".html" + logging.info(f"Appending .html to '{args.output}'") + # Check if the HTML file exists + if os.path.exists(args.output): + logging.info(f"Overwriting '{args.output}'") + else: + output_file = args.input.replace(".json", "") + output_file += ".html" + + return output_file,input_file + +def main(): + # Parse command-line arguments + parser = argparse.ArgumentParser( + description='Render HTML Table summary of the talp.json') + parser.add_argument('-i', '--input', dest='input', help='Path to the TALP JSON file') + parser.add_argument('-o', '--output', dest='output', + help='Name of the html file beeing generated. If not specified [input].html will be chosen', required=False) + args = parser.parse_args() + + + + + # Check if the popMetrics are there: + # Save or display the rendered HTML as needed + + output_file,input_file = _validate_inputs(args) + report = TalpReport(input_file) + rendered_html = report.get_html() + with open(output_file, 'w') as f: + f.write(rendered_html) + + + +if __name__ == "__main__": + main() diff --git a/talp_pages/talp_report_ts.py b/talp_pages/talp_report_ts.py new file mode 100755 index 0000000..9f77a5a --- /dev/null +++ b/talp_pages/talp_report_ts.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python + +import argparse +import json +import pandas as pd +import os +import logging +import sqlite3 +from datetime import datetime + +from .talp_common import TALP_DB_COLUMN_METADATA, TALP_DB_COLUMN_TALP_OUPUT, TALP_DB_COLUMN_TIMESTAMP, TALP_DEFAULT_REGION_NAME, TALP_TABLE_NAME, TALP_TEMPLATE_PATH, TALP_POP_METRICS_KEY, date_time_to_string, render_template + + +class TalpTimeSeriesReport: + def __init__(self, databases_file): + # Now directly try to create a connection + conn = sqlite3.connect(databases_file) + + # and read the contents + self.df = pd.read_sql(f"SELECT * FROM {TALP_TABLE_NAME}", conn) + logging.debug( + f"Created TalpTimeSeries with and instantiated the df: {self.df}") + + def _extract_region_names_from_df(self): + region_names = set() + talp_outputs = self.df[TALP_DB_COLUMN_TALP_OUPUT].tolist() + for talp_output in talp_outputs: + raw_data = json.loads(talp_output) + for entry in raw_data[TALP_POP_METRICS_KEY]: + region_names.add(entry['name']) + return list(region_names) + + def _get_formatted_timestamps(self): + timestamps_df = self.df[TALP_DB_COLUMN_TIMESTAMP].tolist() + timestamps = [] + for timestamp in timestamps_df: + parsed_date = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S.%f") + formatted_date = date_time_to_string(parsed_date) + timestamps.append(formatted_date) + return timestamps + + def _extract_metadata_from_df(self): + metadata_obj = {} + timestamps = self._get_formatted_timestamps() + metadatas = self.df[TALP_DB_COLUMN_METADATA].tolist() + + for timestamp, metadata in zip(timestamps, metadatas): + metadata_obj[timestamp] = json.loads(metadata) + metadata_obj[timestamp]['date'] = timestamp + + return metadata_obj + + @staticmethod + def _pack_series_data(name, data): + return { + 'name': name, + 'type': 'line', + 'data': data} + + def _extract_dataseries(self, metric): + timestamps = self._get_formatted_timestamps() + regions = self._extract_region_names_from_df() + talp_outputs = self.df[TALP_DB_COLUMN_TALP_OUPUT].tolist() + series = [] + + for region in regions: + data = [] + for talp_output in talp_outputs: + raw_data = json.loads(talp_output) + for entry in raw_data[TALP_POP_METRICS_KEY]: + if entry['name'] == region: + try: + data.append(entry[metric]) + except: + data.append(None) + logging.debug( + "WHOOPS not every timestamp has a data point, appending none") + if len(timestamps) != len(data): + logging.critical( + "Apparently not every timestamp has a data point!") + series.append(self._pack_series_data(region, data)) + return series + + def get_html(self): + # Render the template with the data + region_names = self._extract_region_names_from_df() + metadata = self._extract_metadata_from_df() + pe_series = self._extract_dataseries('parallelEfficiency') + et_series = self._extract_dataseries('elapsedTime') + ipc_series = self._extract_dataseries('averageIPC') + timestamps = self._get_formatted_timestamps() + return render_template(TALP_TEMPLATE_PATH, 'talp_time_series.jinja', + timestamps=timestamps, + region_names=region_names, + metadata=metadata, + pe_series=pe_series, + et_series=et_series, + ipc_series=ipc_series, + default_region_name=TALP_DEFAULT_REGION_NAME) + + +def _validate_inputs(args): + output_file = None + input_file = None + + # Check if the SQLITE file exists + if not os.path.exists(args.input): + logging.error( + f"The specified SQLITE file '{args.input}' does not exist.") + raise Exception("Not existing input file") + else: + input_file = args.input + + # Set output + if args.output: + output_file = args.output + if not args.output.endswith('.html'): + output_file += ".html" + logging.info(f"Appending .html to '{args.output}'") + # Check if the HTML file exists + if os.path.exists(args.output): + logging(f"Overwriting '{args.output}'") + else: + output_file = args.input.replace(".json", "") + output_file += ".html" + + return output_file, input_file + + +def main(): + # Parse command-line arguments + parser = argparse.ArgumentParser( + description='Render html summary of the historic TALP data in the provided talp database') + parser.add_argument('-i', '--input', dest='input', + help='Path to the TALP.db file') + parser.add_argument('-o', '--output', dest='output', + help='Name of the html file beeing generated. If not specified [input].html will be chosen', required=False) + args = parser.parse_args() + + output_file, input_file = _validate_inputs(args) + timeseries = TalpTimeSeriesReport(input_file) + rendered_html = timeseries.get_html() + + # Save or display the rendered HTML as needed + with open(output_file, 'w') as f: + f.write(rendered_html) + + +if __name__ == "__main__": + main() diff --git a/talp_pages/templates/talp_index_page.jinja b/talp_pages/templates/talp_index_page.jinja new file mode 100644 index 0000000..87bfed6 --- /dev/null +++ b/talp_pages/templates/talp_index_page.jinja @@ -0,0 +1,22 @@ + + + + + + + + + + + TALP Pages + + +

Welcome to the TALP Pages landing page

+ + + + + + + + \ No newline at end of file diff --git a/talp_pages/templates/talp_report.jinja b/talp_pages/templates/talp_report.jinja new file mode 100644 index 0000000..1a7373d --- /dev/null +++ b/talp_pages/templates/talp_report.jinja @@ -0,0 +1,135 @@ + + + + + + DLB-TALP Performance Report + + + + + + + + + + + + + + +
+ DLB Logo +
+ +

Performance Report

+ + + + + + + + + + + + + + + {% for entry in regions %} + + + + + + + + + + + {% endfor %} + +
NameElapsed Time [s]Average IPCParallel EfficiencyCommunication EfficiencyLoad BalanceLB InLB Out
{{ entry.name }}{{ entry.elapsedTime / 1e9}}{{ entry.averageIPC }}{{ entry.parallelEfficiency }}{{ entry.communicationEfficiency }}{{ entry.loadBalance }}{{ entry.lbIn }}{{ entry.lbOut }}
+ +

Metrics overview

+ For up to date overview of the computed metrics you can consult the DLB User Guide + The coloring above follows the following rules: + + + + + + + + + + + + + + + + + + + + + +
Average IPCParallel Efficiency
< 1 < 0.6
> 1
< 2
> 0.6
< 0.8
> 2 > 0.8
+
+ ©2023-2024, Barcelona Supercomputing Center +
+ + \ No newline at end of file diff --git a/talp_pages/templates/talp_time_series.jinja b/talp_pages/templates/talp_time_series.jinja new file mode 100644 index 0000000..84eef2c --- /dev/null +++ b/talp_pages/templates/talp_time_series.jinja @@ -0,0 +1,325 @@ + + + + + + Your Website + + + + + + + + + + +
+
+

Continous performance analysis results

+

for GENEX on RAVEN

+
+
+ + +
+
+
+

Select Regions

+
+
+
+ +
+
+
+
+

Elapsed Time

+
+
+
+

Parallel Efficiency

+
+
+
+

Average IPC

+
+
+
+ +
+ + +
+
+

© 2024 BSC (BEPPP). All rights reserved.

+
+
+ + + + + + + + + + -- GitLab From c0d455e6f958da0f5f58eb6623372cae7e51069f Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Tue, 7 May 2024 20:57:35 +0200 Subject: [PATCH 02/22] Housekeeping... deleting the generated files... Nothing to see --- index.html | 22 --- parallel_effiency.svg | 1 - report.html | 377 ------------------------------------------ report_ts.html | 325 ------------------------------------ 4 files changed, 725 deletions(-) delete mode 100644 index.html delete mode 100644 parallel_effiency.svg delete mode 100644 report.html delete mode 100644 report_ts.html diff --git a/index.html b/index.html deleted file mode 100644 index 87bfed6..0000000 --- a/index.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - TALP Pages - - -

Welcome to the TALP Pages landing page

- - - - - - - - \ No newline at end of file diff --git a/parallel_effiency.svg b/parallel_effiency.svg deleted file mode 100644 index 6937316..0000000 --- a/parallel_effiency.svg +++ /dev/null @@ -1 +0,0 @@ -Parallel efficiency: 0.44Parallel efficiency0.44 \ No newline at end of file diff --git a/report.html b/report.html deleted file mode 100644 index cb92652..0000000 --- a/report.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - DLB-TALP Performance Report - - - - - - - - - - - - - - -
- DLB Logo -
- -

Performance Report

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElapsed Time [s]Average IPCParallel EfficiencyCommunication EfficiencyLoad BalanceLB InLB Out
MPI Execution272.5552771681.06386296338565580.443294740883413530.981.01.01.0
add0.8836436650.159414051799021460.88604231904107361.01.01.01.0
calc_c21.1663525883.49408843894573231.3952653081276060.981.01.01.0
calc_a1.3830026540.55695582637792431.32990918578874861.01.01.01.0
calc_b79.9495026632.49276189359339061.33354374003258581.01.01.01.0
copy0.2154648840.2754830399598540.96148435623130781.01.01.01.0
exchange6.5538646292.86471429214151830.38884340618274810.471.01.01.0
file_io4.5417653411.9942824128114480.80744042547253570.971.01.01.0
app242.5842212023.1328347988778181.13966453362175260.981.01.01.0
initialize58.3605629812.3653078985145891.4093736518860271.01.01.01.0
initialize_mesh23.834707594.090710065570.77768726420305841.01.01.01.0
initialize_timestep13.727230222.1702458149530071.1754613412059281.01.01.01.0
lin_comb0.7284357560.359281699764108340.85696761047921491.01.01.01.0
mpi_allreduce0.6725349980.118031659017079280.00.01.01.01.0
calc_d16.7022252463.73392878059145830.83630658712181051.01.01.01.0
calc_e0.8301619991.58994176437024430.7567555344950320.661.01.01.0
calc_f0.9859138481.7383930441981590.89695470403381840.771.01.01.0
calc_g1.8836925321.12607898583952480.71294780465767530.911.01.01.0
calc_h1.90036440.58851225352357030.82542509670884461.01.01.01.0
calc_i66.3226856982.7729353385437881.08128814874758721.01.01.01.0
calc_j11.103086492.53859790864668880.96347423700205351.01.01.01.0
calc_k4.9479018923.46049968809908971.12566519353254571.01.01.01.0
calc_l15.8021144321.4806023483337231.29268443836410961.01.01.01.0
- -

Metrics overview

- For up to date overview of the computed metrics you can consult the DLB User Guide - The coloring above follows the following rules: - - - - - - - - - - - - - - - - - - - - - -
Average IPCParallel Efficiency
< 1 < 0.6
> 1
< 2
> 0.6
< 0.8
> 2 > 0.8
-
- ©2023-2024, Barcelona Supercomputing Center -
- - \ No newline at end of file diff --git a/report_ts.html b/report_ts.html deleted file mode 100644 index 7753d0a..0000000 --- a/report_ts.html +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - Your Website - - - - - - - - - - -
-
-

Continous performance analysis results

-

for GENEX on RAVEN

-
-
- - -
-
-
-

Select Regions

-
-
-
- -
-
-
-
-

Elapsed Time

-
-
-
-

Parallel Efficiency

-
-
-
-

Average IPC

-
-
-
- -
- - -
-
-

© 2024 BSC (BEPPP). All rights reserved.

-
-
- - - - - - - - - - \ No newline at end of file -- GitLab From 928d85c8b26426eb51275518c77c16d57bc31e35 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:54:49 +0200 Subject: [PATCH 03/22] move files to more proper place --- {example_files/talp => tests/example_files}/TALP.db | Bin .../example_files}/latest_talp_run.json | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {example_files/talp => tests/example_files}/TALP.db (100%) rename {example_files/talp => tests/example_files}/latest_talp_run.json (100%) diff --git a/example_files/talp/TALP.db b/tests/example_files/TALP.db similarity index 100% rename from example_files/talp/TALP.db rename to tests/example_files/TALP.db diff --git a/example_files/talp/latest_talp_run.json b/tests/example_files/latest_talp_run.json similarity index 100% rename from example_files/talp/latest_talp_run.json rename to tests/example_files/latest_talp_run.json -- GitLab From 010621ee8bedadbfb2d790d98437ae8a24cfecde Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:55:05 +0200 Subject: [PATCH 04/22] include gitlab pipelines --- gitlab-templates/add-to-db/template.yml | 42 +++++++++++++++++++++ gitlab-templates/generate-html/template.yml | 34 +++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 gitlab-templates/add-to-db/template.yml create mode 100644 gitlab-templates/generate-html/template.yml diff --git a/gitlab-templates/add-to-db/template.yml b/gitlab-templates/add-to-db/template.yml new file mode 100644 index 0000000..d232c8d --- /dev/null +++ b/gitlab-templates/add-to-db/template.yml @@ -0,0 +1,42 @@ +spec: + inputs: + stage: + default: performance + generating_job: # From which we will get the talp.json + default: talp-run + talp_output: # filename of the json generated by talp + default: ./talp.json + enviroment: + default: production + gitlab_url: + default: https://gitlab.com + project_name: + default: None + dlb_home: + default: None + job_name: + default: talp-add-to-db-job +--- +$[[ inputs.job_name ]]: + needs: + - job: $[[ inputs.generating_job ]] + artifacts: true + dependencies: + - $[[ inputs.generating_job ]] + environment: $[[ inputs.enviroment ]] + image: python:3.12-bullseye + before_script: + - pip install -r $[[ inputs.dlb_home ]]/gitlab/requirements.txt + - pip install -r $[[ inputs.dlb_home ]]/talp_report/requirements.txt + script: + - echo "Downloading last execution" + - python $[[ inputs.dlb_home ]]/gitlab/download_artifacts.py --gitlab-url $[[ inputs.gitlab_url ]] --project-name $[[ inputs.project_name ]] --job-name $CI_JOB_NAME --gitlab-token $PAT_TOKEN --output-file talp.zip --log-level=DEBUG + - unzip talp.zip || if ! [[ -d talp ]]; then mkdir talp; echo "Creating an empty talp directory --> First RUN?"; fi + - python $[[ inputs.dlb_home ]]/talp_report/talp_add_to_db.py -t $[[ inputs.talp_output ]] -db talp/TALP.db + - cp talp.json talp/latest_talp_run.json + stage: $[[ inputs.stage ]] + artifacts: + paths: + - talp/ + + diff --git a/gitlab-templates/generate-html/template.yml b/gitlab-templates/generate-html/template.yml new file mode 100644 index 0000000..d96b4cd --- /dev/null +++ b/gitlab-templates/generate-html/template.yml @@ -0,0 +1,34 @@ +spec: + inputs: + stage: + default: deploy + generating_job: # From which we will get the talp.db and latest_talp_run.json + default: talp-run + enviroment: + default: production + dlb_home: + default: None + job_name: + default: talp-generate-html +--- +$[[ inputs.job_name ]]: + stage: $[[ inputs.stage ]] + needs: + - job: $[[ inputs.generating_job ]] + artifacts: true + dependencies: + - $[[ inputs.generating_job ]] + environment: $[[ inputs.enviroment ]] + image: python:3.12-bullseye + before_script: + - pip install -r $[[ inputs.dlb_home ]]/talp_report/requirements.txt + script: + - mkdir -p public + - python $[[ inputs.dlb_home ]]/talp_report/talp_time_series.py talp/TALP.db -o public/talp_time_series.html + - python $[[ inputs.dlb_home ]]/talp_report/talp_html_report.py -o public/talp_report.html talp/latest_talp_run.json + - echo "talp_time_series.html and talp_report.html generated." + artifacts: + paths: + - public + + -- GitLab From 82f03bfb2c19fdd930a4c947ecb4a4ba50df4b89 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:55:45 +0200 Subject: [PATCH 05/22] rename some commons to make it a bit more predictable --- talp_pages/talp_common.py | 4 ++-- talp_pages/talp_pages.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/talp_pages/talp_common.py b/talp_pages/talp_common.py index 49f347e..f59c0fd 100644 --- a/talp_pages/talp_common.py +++ b/talp_pages/talp_common.py @@ -15,9 +15,9 @@ TALP_TEMPLATE_PATH = pathlib.Path(__file__).parent.joinpath('templates').resolve TALP_TABLE_COLUMNS_WITH_DATATYPES = f"({TALP_DB_COLUMN_TIMESTAMP} TIMESTAMP, {TALP_DB_COLUMN_TALP_OUPUT} TEXT, {TALP_DB_COLUMN_METADATA} TEXT)" TALP_TABLE_COLUMNS = f"({TALP_DB_COLUMN_TIMESTAMP} ,{TALP_DB_COLUMN_TALP_OUPUT}, {TALP_DB_COLUMN_METADATA})" -TALP_PAGES_SITE = 'report.html' +TALP_PAGES_REPORT_SITE = 'report.html' TALP_PAGES_TIME_SERIES_SITE='report_ts.html' -TALP_PAGES_INDEX_PAGE='index.html' +TALP_PAGES_INDEX_SITE='index.html' TALP_PAGES_BAGDE='parallel_effiency.svg' def render_template(directory, template_name, **context): diff --git a/talp_pages/talp_pages.py b/talp_pages/talp_pages.py index 0869b38..45a7db6 100755 --- a/talp_pages/talp_pages.py +++ b/talp_pages/talp_pages.py @@ -4,7 +4,7 @@ import argparse import os import logging -from .talp_common import TALP_PAGES_INDEX_PAGE, TALP_PAGES_SITE, TALP_PAGES_TIME_SERIES_SITE, TALP_PAGES_BAGDE, render_template, TALP_TEMPLATE_PATH +from .talp_common import TALP_PAGES_INDEX_SITE, TALP_PAGES_REPORT_SITE, TALP_PAGES_TIME_SERIES_SITE, TALP_PAGES_BAGDE, render_template, TALP_TEMPLATE_PATH from .talp_badge import TalpBadge from .talp_report import TalpReport from .talp_report_ts import TalpTimeSeriesReport @@ -75,7 +75,7 @@ def main(): # Adding argument for DB file parser.add_argument('-d', '--db', dest='db_input', help='Path to the TALP.db file') # Adding argument for prefix - parser.add_argument('-p', '--prefix', dest='prefix', help=f"Prefix used in front of the (_){TALP_PAGES_SITE}, (_){TALP_PAGES_TIME_SERIES_SITE} and (_){TALP_PAGES_INDEX_PAGE}", required=False) + parser.add_argument('-p', '--prefix', dest='prefix', help=f"Prefix used in front of the (_){TALP_PAGES_REPORT_SITE}, (_){TALP_PAGES_TIME_SERIES_SITE} and (_){TALP_PAGES_INDEX_SITE}", required=False) # Parsing arguments args = parser.parse_args() @@ -83,9 +83,9 @@ def main(): json_file,db_file,prefix = _verify_input(args) ouput_report_ts=_add_prefix(prefix,TALP_PAGES_TIME_SERIES_SITE) - ouput_report=_add_prefix(prefix,TALP_PAGES_SITE) + ouput_report=_add_prefix(prefix,TALP_PAGES_REPORT_SITE) badge_file=_add_prefix(prefix,TALP_PAGES_BAGDE) - ouput_index=_add_prefix(prefix,TALP_PAGES_INDEX_PAGE) + ouput_index=_add_prefix(prefix,TALP_PAGES_INDEX_SITE) index = TalpIndexPage(ouput_report,ouput_report_ts,badge_file) report_ts= TalpTimeSeriesReport(db_file) -- GitLab From 28b242ca2bd115dec9c7a995ff22ecf475f65aad Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:56:00 +0200 Subject: [PATCH 06/22] add homepage and repo information --- pyproject.toml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6679501..b9ee640 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,8 +7,14 @@ maintainers = ["Valentin Seitz "] readme = "README.md" license = "GPL-3.0-only" keywords = ["HPC", "Performance Analysis","Profiling","Continuous Performance Analysis"] +classifiers = [ + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Topic :: Scientific/Engineering :: Visualization", + "Topic :: System :: Distributed Computing"] - +homepage = "https://pm.bsc.es/gitlab/dlb/talp-pages/" +repository= "https://pm.bsc.es/gitlab/dlb/talp-pages/" include = [ "talp_pages/templates/*.jinja" ] -- GitLab From 2907e640cab5a11ff5d3596c39220c08ebd966f2 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:56:23 +0200 Subject: [PATCH 07/22] Add Initial links to the subreports --- talp_pages/templates/talp_index_page.jinja | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/talp_pages/templates/talp_index_page.jinja b/talp_pages/templates/talp_index_page.jinja index 87bfed6..209292b 100644 --- a/talp_pages/templates/talp_index_page.jinja +++ b/talp_pages/templates/talp_index_page.jinja @@ -13,6 +13,11 @@

Welcome to the TALP Pages landing page

+ Report + + Report_ts + Bagde + -- GitLab From 7f28f2cdaafb69a07ff0e1442a030dcaeaaddb99 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 11:56:37 +0200 Subject: [PATCH 08/22] Add Tests with pytests --- tests/test_bagde.py | 17 +++++++++++++++++ tests/test_index_page.py | 18 ++++++++++++++++++ tests/test_report.py | 16 ++++++++++++++++ tests/test_report_ts.py | 16 ++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 tests/test_bagde.py create mode 100644 tests/test_index_page.py create mode 100644 tests/test_report.py create mode 100644 tests/test_report_ts.py diff --git a/tests/test_bagde.py b/tests/test_bagde.py new file mode 100644 index 0000000..8562395 --- /dev/null +++ b/tests/test_bagde.py @@ -0,0 +1,17 @@ +import pathlib +from talp_pages.talp_badge import TalpBadge +TALP_JSON_EXAMPLE_DIR= pathlib.Path(__file__).parent.joinpath('example_files').resolve() + + +def test_construct(): + file=TALP_JSON_EXAMPLE_DIR / "latest_talp_run.json" + badge = TalpBadge(file) + assert badge + + +def test_get_content(): + file=TALP_JSON_EXAMPLE_DIR / "latest_talp_run.json" + badge = TalpBadge(file) + expected_effiency = str(round(0.44329474088341353, 2)) + svg=badge.get_badge_svg() + assert expected_effiency.encode() in svg diff --git a/tests/test_index_page.py b/tests/test_index_page.py new file mode 100644 index 0000000..e54c6c3 --- /dev/null +++ b/tests/test_index_page.py @@ -0,0 +1,18 @@ + +from talp_pages.talp_pages import TalpIndexPage +from talp_pages.talp_common import TALP_PAGES_BAGDE,TALP_PAGES_TIME_SERIES_SITE,TALP_PAGES_REPORT_SITE +def test_construct(): + report = TalpIndexPage(TALP_PAGES_REPORT_SITE,TALP_PAGES_TIME_SERIES_SITE,TALP_PAGES_BAGDE) + assert report + + +def test_get_content(): + report = "rapphort.html" + time_series = "rapphort_ts.html" + badge="unparallel_eff.svg" + index = TalpIndexPage(report,time_series,badge) + html = index.get_html() + assert html + assert report in html + assert time_series in html + assert badge in html diff --git a/tests/test_report.py b/tests/test_report.py new file mode 100644 index 0000000..5a2c67b --- /dev/null +++ b/tests/test_report.py @@ -0,0 +1,16 @@ +import pathlib +from talp_pages.talp_report import TalpReport +TALP_JSON_EXAMPLE_DIR= pathlib.Path(__file__).parent.joinpath('example_files').resolve() + + +def test_construct(): + file=TALP_JSON_EXAMPLE_DIR / "latest_talp_run.json" + report = TalpReport(file) + assert report + + +def test_get_content(): + file=TALP_JSON_EXAMPLE_DIR / "latest_talp_run.json" + report = TalpReport(file) + html = report.get_html() + assert html and len(html) > 80 diff --git a/tests/test_report_ts.py b/tests/test_report_ts.py new file mode 100644 index 0000000..62ef60b --- /dev/null +++ b/tests/test_report_ts.py @@ -0,0 +1,16 @@ +import pathlib +from talp_pages.talp_report_ts import TalpTimeSeriesReport +TALP_JSON_EXAMPLE_DIR= pathlib.Path(__file__).parent.joinpath('example_files').resolve() + + +def test_construct(): + file=TALP_JSON_EXAMPLE_DIR / "TALP.db" + report = TalpTimeSeriesReport(file) + assert report + + +def test_get_content(): + file=TALP_JSON_EXAMPLE_DIR / "TALP.db" + report = TalpTimeSeriesReport(file) + html = report.get_html() + assert html and len(html) > 80 -- GitLab From 8036da989132e6a8a2158803fda807233711fb80 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 16:43:47 +0200 Subject: [PATCH 09/22] made everything a bit prettier --- talp_pages/templates/talp_index_page.jinja | 144 ++++++++++- talp_pages/templates/talp_report.jinja | 264 ++++++++++++-------- talp_pages/templates/talp_time_series.jinja | 191 ++++++++------ 3 files changed, 411 insertions(+), 188 deletions(-) diff --git a/talp_pages/templates/talp_index_page.jinja b/talp_pages/templates/talp_index_page.jinja index 209292b..a1b4ece 100644 --- a/talp_pages/templates/talp_index_page.jinja +++ b/talp_pages/templates/talp_index_page.jinja @@ -4,24 +4,150 @@ - - - + + + TALP Pages -

Welcome to the TALP Pages landing page

+ +
+ +
+
+ + + + + +

TALP Pages

+
+

+ Easily monitor your applications performance and keep a log of performance measurements over time. +

+
+ +
+
+
+ +
+

Current features

+
+
+
+ +
+
+

Performance Report

+

+ View performance metrics collected from the last run of your application in a table form. + You also get visual highlights of regions where the metrics indicate that performance can be improved. +

+ + View metrics of latest run + +
+
+
+
+ +
+
+

Time Series Report

+

+ Look at the time evoluation of your performance metrics, like IPC or execution time. + To not overwhelm you we provide the possibility to filter for certain regions. +

+ + View time evolution + +
+
+
+
+ +
+
+

Badge Parallel efficiency: 0.95Parallel efficiency0.44

+

+ To be able to flex your execellent performance to other groups, we provide a Bagde you can integrate into your CI/CD pipeline. + +

+ + Learn how to integrate the badge + +
+
+
+
- Report - Report_ts - Bagde +
+
+
+ + + + + + + + BEPPP - Barcelona Supercomputing Center +
+ + +
+
- - + + \ No newline at end of file diff --git a/talp_pages/templates/talp_report.jinja b/talp_pages/templates/talp_report.jinja index 1a7373d..8d44b00 100644 --- a/talp_pages/templates/talp_report.jinja +++ b/talp_pages/templates/talp_report.jinja @@ -1,20 +1,26 @@ - + - - - - DLB-TALP Performance Report + + + + - - - - - - - - + + TALP Pages + + +
- DLB Logo +
+
+
+
+

Performance Report

+
+
+
+
+ + + + + + + + + + + + + + + {% for entry in regions %} + + + + + + + + + + + {% endfor %} + +
NameElapsed Time [s]Average IPCParallel EfficiencyCommunication EfficiencyLoad BalanceLB InLB Out
{{ entry.name }}{{ entry.elapsedTime / 1e9}}{{ entry.averageIPC }}{{ entry.parallelEfficiency }}{{ entry.communicationEfficiency }}{{ entry.loadBalance }}{{ entry.lbIn }}{{ entry.lbOut }}
+
+
+
+
+ +
+
+ Metrics overview +
+
+ The coloring shown above follows the following rules: + + + + + + + + + + + + + + + + + + + + + +
Average IPCParallel Efficiency
< 1 < 0.6
> 1
< 2
> 0.6
< 0.8
> 2 > 0.8
+

+ For up to date overview of the computed metrics you can consult the documentation via: +

+ Show in-depth explaination +
+
+ +

+ + + +
+
+
+ +
+
+
+ + + + + + + + BEPPP - Barcelona Supercomputing Center +
-

Performance Report

- - - - - - - - - - - - - - - {% for entry in regions %} - - - - - - - - - - - {% endfor %} - -
NameElapsed Time [s]Average IPCParallel EfficiencyCommunication EfficiencyLoad BalanceLB InLB Out
{{ entry.name }}{{ entry.elapsedTime / 1e9}}{{ entry.averageIPC }}{{ entry.parallelEfficiency }}{{ entry.communicationEfficiency }}{{ entry.loadBalance }}{{ entry.lbIn }}{{ entry.lbOut }}
+ +
+
-

Metrics overview

- For up to date overview of the computed metrics you can consult the DLB User Guide - The coloring above follows the following rules: - - - - - - - - - - - - - - - - - - - - - -
Average IPCParallel Efficiency
< 1 < 0.6
> 1
< 2
> 0.6
< 0.8
> 2 > 0.8
-
- ©2023-2024, Barcelona Supercomputing Center -
- + + + + + + \ No newline at end of file diff --git a/talp_pages/templates/talp_time_series.jinja b/talp_pages/templates/talp_time_series.jinja index 84eef2c..0b82b50 100644 --- a/talp_pages/templates/talp_time_series.jinja +++ b/talp_pages/templates/talp_time_series.jinja @@ -1,82 +1,123 @@ - + - - - - Your Website - - - - - - - - - - -
-
-

Continous performance analysis results

-

for GENEX on RAVEN

-
-
- - -
-
-
-

Select Regions

-
-
-
- + + + + + + + + + + + + TALP Pages + + + +
+ -
-

Elapsed Time

-
-
-
-

Parallel Efficiency

-
+
+
+
+
+

Time Series Report

+
-
-

Average IPC

-
+
+
+

Select Regions

+
+
+
+ +
+
+
+
+

Elapsed Time

+
+
+
+

Parallel Efficiency

+
+
+
+

Average IPC

+
+
- -
- -
+ + + +
-

© 2024 BSC (BEPPP). All rights reserved.

+
+
+ + + + + + + + BEPPP - Barcelona Supercomputing Center +
+ + +
-
- - - - + + + + + - + - - + + \ No newline at end of file -- GitLab From 9ab498c2a8a6e8f156be388f853ad2304314e743 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 16:45:22 +0200 Subject: [PATCH 10/22] adjust version to match dlb --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b9ee640..f637c41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "talp-pages" -version = "0.0.1" +version = "3.4.0" description = "Command line tools to generate performance reports using the TALP module of DLB" authors = ["Valentin Seitz "] maintainers = ["Valentin Seitz "] -- GitLab From b0f8dbfa3c0c51e5c5207d58976f98edb573f9ac Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 17:01:42 +0200 Subject: [PATCH 11/22] Add half done readme --- README.md | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 571cc7b..5fccd7f 100644 --- a/README.md +++ b/README.md @@ -1 +1,66 @@ -# Talp pages \ No newline at end of file +# Talp Pages + +TALP Pages is a collection of Python scripts to postprocess the `json` outputs of [DLB TALP](https://pm.bsc.es/ftp/dlb/doc/user-guide/intro.html#talp-tracking-application-live-performance) and Gitlab pipeline snippets [that can be included](https://docs.gitlab.com/ee/ci/yaml/#include) in your project. +This makes it easy to integrate TALP into your CI/CD setup and run Continous Benchmarking without having to code up your own solution. + +**We provide:** + +- talp_pages: Command line tool to generate static html pages +- Artifact management: A easy way to use Gitlab Artifacts to generate time series data plots. +- Reusable Jobs that easily integrate into a existing Gitlab CI enviroment + +## Use python package + +Talp-Pages is written in Python (3.9+). We rely on [poetry](https://python-poetry.org/) for packaging. +To use, simply install via: + +```pip install talp-pages``` + +From there you should have the following command-line tools available: + +- `talp_report` +- `talp_add_to_db` +- `talp_badge` +- `talp_report_ts` +- `talp_pages` +- `talp_download_artifacts` + +## Use Gitlab Jobs + +This section currently is not completly done, but we provide examples on how to use the jobs below: + +```yaml + +talp-performance-run: + stage: performance + image: python:3.12-bullseye + script: + - python generate_talp_json.py + artifacts: + paths: + - talp.json + + +include: + - remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw/main/templates/add-to-db/template.yml + inputs: + stage: deploy + generating_job: talp-performance-run + talp_output: ./talp.json + enviroment: production + gitlab_url: https://gitlab.com + project_name: valentin.seitz1/sample-application + dlb_home: ./dlb_talp + job_name: talp-create-artifacts + - remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw/main/templates/generate-html/template.yml + inputs: + stage: deploy + generating_job: talp-create-artifacts + enviroment: production + dlb_home: ./dlb_talp + job_name: talp-gen-html +``` + +## License + +Talp-Pages is available under the General Public License v3.0. -- GitLab From 2b6d3ccaa5a0c52641a40156abbe73a5a3592d0a Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 17:11:00 +0200 Subject: [PATCH 12/22] lets see --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5fccd7f..1630455 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Talp Pages +![TALP LOGO](talp_dlb_logo.png) + TALP Pages is a collection of Python scripts to postprocess the `json` outputs of [DLB TALP](https://pm.bsc.es/ftp/dlb/doc/user-guide/intro.html#talp-tracking-application-live-performance) and Gitlab pipeline snippets [that can be included](https://docs.gitlab.com/ee/ci/yaml/#include) in your project. This makes it easy to integrate TALP into your CI/CD setup and run Continous Benchmarking without having to code up your own solution. -- GitLab From 4fc53347a95555c73ba02e871b7eda9ddffc1d8f Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 17:11:51 +0200 Subject: [PATCH 13/22] add acutal image --- talp_dlb_logo.png | Bin 0 -> 308683 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 talp_dlb_logo.png diff --git a/talp_dlb_logo.png b/talp_dlb_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2717ea35fd62f643608d670c6e59877b590203 GIT binary patch literal 308683 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

+ {% endif %} diff --git a/talp_pages/templates/talp_report.jinja b/talp_pages/templates/talp_report.jinja index 8d44b00..89d6212 100644 --- a/talp_pages/templates/talp_report.jinja +++ b/talp_pages/templates/talp_report.jinja @@ -57,26 +57,28 @@ + {% if links.render_navbar %} + {% endif %} diff --git a/talp_pages/templates/talp_time_series.jinja b/talp_pages/templates/talp_time_series.jinja index 0b82b50..c6eedde 100644 --- a/talp_pages/templates/talp_time_series.jinja +++ b/talp_pages/templates/talp_time_series.jinja @@ -31,26 +31,28 @@ + {% if links.render_navbar %} + {% endif %} diff --git a/tests/test_index_page.py b/tests/test_index_page.py index e54c6c3..4174073 100644 --- a/tests/test_index_page.py +++ b/tests/test_index_page.py @@ -1,8 +1,8 @@ from talp_pages.talp_pages import TalpIndexPage -from talp_pages.talp_common import TALP_PAGES_BAGDE,TALP_PAGES_TIME_SERIES_SITE,TALP_PAGES_REPORT_SITE +from talp_pages.talp_common import TALP_PAGES_BAGDE,TALP_PAGES_TIME_SERIES_SITE,TALP_PAGES_REPORT_SITE,TalpRelativeLinks def test_construct(): - report = TalpIndexPage(TALP_PAGES_REPORT_SITE,TALP_PAGES_TIME_SERIES_SITE,TALP_PAGES_BAGDE) + report = TalpIndexPage() assert report @@ -10,8 +10,9 @@ def test_get_content(): report = "rapphort.html" time_series = "rapphort_ts.html" badge="unparallel_eff.svg" - index = TalpIndexPage(report,time_series,badge) - html = index.get_html() + links=TalpRelativeLinks(report,time_series,badge,render_navbar=True) + index = TalpIndexPage() + html = index.get_html(links) assert html assert report in html assert time_series in html diff --git a/tests/test_report.py b/tests/test_report.py index 5a2c67b..cdde442 100644 --- a/tests/test_report.py +++ b/tests/test_report.py @@ -1,5 +1,6 @@ import pathlib from talp_pages.talp_report import TalpReport +from talp_pages.talp_common import TalpRelativeLinks TALP_JSON_EXAMPLE_DIR= pathlib.Path(__file__).parent.joinpath('example_files').resolve() @@ -12,5 +13,6 @@ def test_construct(): def test_get_content(): file=TALP_JSON_EXAMPLE_DIR / "latest_talp_run.json" report = TalpReport(file) - html = report.get_html() + links=TalpRelativeLinks("output_file","output_file","output_file") + html = report.get_html(links) assert html and len(html) > 80 diff --git a/tests/test_report_ts.py b/tests/test_report_ts.py index 62ef60b..dcecaf4 100644 --- a/tests/test_report_ts.py +++ b/tests/test_report_ts.py @@ -1,5 +1,5 @@ import pathlib -from talp_pages.talp_report_ts import TalpTimeSeriesReport +from talp_pages.talp_report_ts import TalpTimeSeriesReport,TalpRelativeLinks TALP_JSON_EXAMPLE_DIR= pathlib.Path(__file__).parent.joinpath('example_files').resolve() @@ -12,5 +12,6 @@ def test_construct(): def test_get_content(): file=TALP_JSON_EXAMPLE_DIR / "TALP.db" report = TalpTimeSeriesReport(file) - html = report.get_html() + links=TalpRelativeLinks("output_file","output_file","output_file") + html = report.get_html(links) assert html and len(html) > 80 -- GitLab From 946dea867d917bf81b2c8ef7be060fe025c39384 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 11:24:47 +0200 Subject: [PATCH 18/22] python package in alpha state, lets check the pipelines --- README.md | 2 +- gitlab-templates/add-to-db/template.yml | 11 +++++------ gitlab-templates/generate-html/template.yml | 12 ++++++------ pyproject.toml | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 1b23f97..adb43f6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![TALP LOGO](talp_dlb_logo.png){height=250px} +![TALP LOGO](https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw/add-v1/talp_dlb_logo.png){height=250px} # Talp Pages diff --git a/gitlab-templates/add-to-db/template.yml b/gitlab-templates/add-to-db/template.yml index d232c8d..896abf1 100644 --- a/gitlab-templates/add-to-db/template.yml +++ b/gitlab-templates/add-to-db/template.yml @@ -12,8 +12,8 @@ spec: default: https://gitlab.com project_name: default: None - dlb_home: - default: None + dlb_version: + default: "3.4" job_name: default: talp-add-to-db-job --- @@ -26,13 +26,12 @@ $[[ inputs.job_name ]]: environment: $[[ inputs.enviroment ]] image: python:3.12-bullseye before_script: - - pip install -r $[[ inputs.dlb_home ]]/gitlab/requirements.txt - - pip install -r $[[ inputs.dlb_home ]]/talp_report/requirements.txt + - pip install talp-pages script: - echo "Downloading last execution" - - python $[[ inputs.dlb_home ]]/gitlab/download_artifacts.py --gitlab-url $[[ inputs.gitlab_url ]] --project-name $[[ inputs.project_name ]] --job-name $CI_JOB_NAME --gitlab-token $PAT_TOKEN --output-file talp.zip --log-level=DEBUG + - talp_download_artifacts --gitlab-url $[[ inputs.gitlab_url ]] --project-name $[[ inputs.project_name ]] --job-name $CI_JOB_NAME --gitlab-token $PAT_TOKEN --output-file talp.zip --log-level=DEBUG - unzip talp.zip || if ! [[ -d talp ]]; then mkdir talp; echo "Creating an empty talp directory --> First RUN?"; fi - - python $[[ inputs.dlb_home ]]/talp_report/talp_add_to_db.py -t $[[ inputs.talp_output ]] -db talp/TALP.db + - talp_add_to_db -t $[[ inputs.talp_output ]] -db talp/TALP.db - cp talp.json talp/latest_talp_run.json stage: $[[ inputs.stage ]] artifacts: diff --git a/gitlab-templates/generate-html/template.yml b/gitlab-templates/generate-html/template.yml index d96b4cd..e5d355f 100644 --- a/gitlab-templates/generate-html/template.yml +++ b/gitlab-templates/generate-html/template.yml @@ -6,8 +6,8 @@ spec: default: talp-run enviroment: default: production - dlb_home: - default: None + dlb_version: + default: "3.4" job_name: default: talp-generate-html --- @@ -21,12 +21,12 @@ $[[ inputs.job_name ]]: environment: $[[ inputs.enviroment ]] image: python:3.12-bullseye before_script: - - pip install -r $[[ inputs.dlb_home ]]/talp_report/requirements.txt + - - pip install talp-pages script: - mkdir -p public - - python $[[ inputs.dlb_home ]]/talp_report/talp_time_series.py talp/TALP.db -o public/talp_time_series.html - - python $[[ inputs.dlb_home ]]/talp_report/talp_html_report.py -o public/talp_report.html talp/latest_talp_run.json - - echo "talp_time_series.html and talp_report.html generated." + - cd public + - talp_pages -j ../talp/latest_talp_run.json -d ../talp/TALP.db + - echo "Generated TALP pages" artifacts: paths: - public diff --git a/pyproject.toml b/pyproject.toml index 20a2eb4..b0f889a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "talp-pages" -version = "3.4.0" +version = "3.4.0-alpha" description = "Command line tools to generate performance reports using the TALP module of DLB" authors = ["Valentin Seitz "] maintainers = ["Valentin Seitz "] -- GitLab From 2d56e0ff170cb82e5e2a818bbb7ed043e0dc5da1 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 11:29:59 +0200 Subject: [PATCH 19/22] removed dlb version for now --- gitlab-templates/add-to-db/template.yml | 2 -- gitlab-templates/generate-html/template.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/gitlab-templates/add-to-db/template.yml b/gitlab-templates/add-to-db/template.yml index 896abf1..65a5522 100644 --- a/gitlab-templates/add-to-db/template.yml +++ b/gitlab-templates/add-to-db/template.yml @@ -12,8 +12,6 @@ spec: default: https://gitlab.com project_name: default: None - dlb_version: - default: "3.4" job_name: default: talp-add-to-db-job --- diff --git a/gitlab-templates/generate-html/template.yml b/gitlab-templates/generate-html/template.yml index e5d355f..fb4836b 100644 --- a/gitlab-templates/generate-html/template.yml +++ b/gitlab-templates/generate-html/template.yml @@ -6,8 +6,6 @@ spec: default: talp-run enviroment: default: production - dlb_version: - default: "3.4" job_name: default: talp-generate-html --- -- GitLab From 6ea4cf8c269c32ef408646f5e073c2059024a40e Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 11:35:40 +0200 Subject: [PATCH 20/22] added right calling convention --- gitlab-templates/add-to-db/template.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab-templates/add-to-db/template.yml b/gitlab-templates/add-to-db/template.yml index 65a5522..a1129f1 100644 --- a/gitlab-templates/add-to-db/template.yml +++ b/gitlab-templates/add-to-db/template.yml @@ -29,7 +29,7 @@ $[[ inputs.job_name ]]: - echo "Downloading last execution" - talp_download_artifacts --gitlab-url $[[ inputs.gitlab_url ]] --project-name $[[ inputs.project_name ]] --job-name $CI_JOB_NAME --gitlab-token $PAT_TOKEN --output-file talp.zip --log-level=DEBUG - unzip talp.zip || if ! [[ -d talp ]]; then mkdir talp; echo "Creating an empty talp directory --> First RUN?"; fi - - talp_add_to_db -t $[[ inputs.talp_output ]] -db talp/TALP.db + - talp_add_to_db -i $[[ inputs.talp_output ]] -db talp/TALP.db - cp talp.json talp/latest_talp_run.json stage: $[[ inputs.stage ]] artifacts: -- GitLab From 1bf6fea0ee4a4cd6e29fe91c66c06c50a8cf5360 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 11:37:22 +0200 Subject: [PATCH 21/22] Bump package version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index b0f889a..b984969 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "talp-pages" -version = "3.4.0-alpha" +version = "3.4.0-alpha1" description = "Command line tools to generate performance reports using the TALP module of DLB" authors = ["Valentin Seitz "] maintainers = ["Valentin Seitz "] -- GitLab From 521af722cb27247ef03557cb40604408e93f0e88 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 15:08:24 +0200 Subject: [PATCH 22/22] Added Readmes --- README.md | 35 +++--------------------- gitlab-templates/add-to-db/README.md | 22 +++++++++++++++ gitlab-templates/generate-html/README.md | 21 ++++++++++++++ 3 files changed, 47 insertions(+), 31 deletions(-) create mode 100644 gitlab-templates/add-to-db/README.md create mode 100644 gitlab-templates/generate-html/README.md diff --git a/README.md b/README.md index adb43f6..0aa6d45 100644 --- a/README.md +++ b/README.md @@ -29,39 +29,12 @@ From there you should have the following command-line tools available: ## Use Gitlab Jobs -This section currently is not completly done, but we provide examples on how to use the jobs below: +In order to use the GitlabJobs to generate the Talp Pages automagically, just adopt the configuration showcased in the [example application](https://gitlab.com/valentin.seitz1/sample-application) -```yaml +We also provide documentation on the individual jobs: -talp-performance-run: - stage: performance - image: python:3.12-bullseye - script: - - python generate_talp_json.py - artifacts: - paths: - - talp.json - - -include: - - remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw/main/templates/add-to-db/template.yml - inputs: - stage: deploy - generating_job: talp-performance-run - talp_output: ./talp.json - enviroment: production - gitlab_url: https://gitlab.com - project_name: valentin.seitz1/sample-application - dlb_home: ./dlb_talp - job_name: talp-create-artifacts - - remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw/main/templates/generate-html/template.yml - inputs: - stage: deploy - generating_job: talp-create-artifacts - enviroment: production - dlb_home: ./dlb_talp - job_name: talp-gen-html -``` +- [add-to-db](gitlab-templates/add-to-db/README.md) +- [generate-html](gitlab-templates/generate-html/README.md) ## License diff --git a/gitlab-templates/add-to-db/README.md b/gitlab-templates/add-to-db/README.md new file mode 100644 index 0000000..2cd62be --- /dev/null +++ b/gitlab-templates/add-to-db/README.md @@ -0,0 +1,22 @@ +# Add to DB + +This Job "template" uses adds the `.json` file of the just happend execution into the TALP database and exposes the artifacts in the `./talp` path. + +## Example Usage + +Note, that you need to setup a [Personal Access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) in the `enviroment` the job will be executed in. This token needs to be [sadded as a variable](https://docs.gitlab.com/ee/ci/variables/#define-a-cicd-variable-in-the-ui) called `PAT_TOKEN`, which is able to read the artifacts API of gitlab. + +**Make sure to hide the visibility and configure it properly.** + +```yaml +include: + - remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw//gitlab-templates/add-to-db/template.yml + inputs: + stage: deploy # Stage in which the job will run + generating_job: talp-performance-run #Job that generated the .json file (we will grab artifacts from there) + talp_output: ./talp.json # The output name of the json file + enviroment: production # The enviroment the pipeline runs in + gitlab_url: https://gitlab.com # The url of the gitlab instance it runs on (needed for the API request) + project_name: / # The project slug of the repository the jobs should run in + job_name: talp-create-artifacts # The name of the job (needed for the generate-html job) +``` diff --git a/gitlab-templates/generate-html/README.md b/gitlab-templates/generate-html/README.md new file mode 100644 index 0000000..fd2a601 --- /dev/null +++ b/gitlab-templates/generate-html/README.md @@ -0,0 +1,21 @@ +# Generate HTML + +This Job "template" finally generates the html from a given database and json file using `talp_pages` + +## Example Usage + +```yaml +- remote: https://pm.bsc.es/gitlab/dlb/talp-pages/-/raw//gitlab-templates/generate-html/template.yml + inputs: + stage: deploy # Stage in which the job will run + generating_job: talp-create-artifacts # The name of the add-to-db job (or any job that produces the matching artifacts) + enviroment: production # The enviroment the pipeline runs in + job_name: talp-gen-html # The name of the job. (Normally is needed to include in the pages job like shown below) + +pages: + ... + needs: + - job: talp-gen-html + optional: true + ... +``` -- GitLab

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 Date: Wed, 8 May 2024 17:12:49 +0200 Subject: [PATCH 14/22] lets see --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1630455..0bef39a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Talp Pages -![TALP LOGO](talp_dlb_logo.png) +![TALP LOGO](talp_dlb_logo.png){height=250px} TALP Pages is a collection of Python scripts to postprocess the `json` outputs of [DLB TALP](https://pm.bsc.es/ftp/dlb/doc/user-guide/intro.html#talp-tracking-application-live-performance) and Gitlab pipeline snippets [that can be included](https://docs.gitlab.com/ee/ci/yaml/#include) in your project. This makes it easy to integrate TALP into your CI/CD setup and run Continous Benchmarking without having to code up your own solution. -- GitLab From 5d79d1cd557dd7b234df97894862ad7698541c3a Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Wed, 8 May 2024 17:14:44 +0200 Subject: [PATCH 15/22] reverse --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0bef39a..1b23f97 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# Talp Pages - ![TALP LOGO](talp_dlb_logo.png){height=250px} +# Talp Pages + TALP Pages is a collection of Python scripts to postprocess the `json` outputs of [DLB TALP](https://pm.bsc.es/ftp/dlb/doc/user-guide/intro.html#talp-tracking-application-live-performance) and Gitlab pipeline snippets [that can be included](https://docs.gitlab.com/ee/ci/yaml/#include) in your project. This makes it easy to integrate TALP into your CI/CD setup and run Continous Benchmarking without having to code up your own solution. -- GitLab From 9d1a156b0d4e207dacdb8bc9451a96c4e2f7aba8 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 10:34:27 +0200 Subject: [PATCH 16/22] Added better no args handling --- talp_pages/talp_badge.py | 14 ++++++++++---- talp_pages/talp_pages.py | 20 +++++++++++++------- talp_pages/talp_report.py | 14 ++++++++------ talp_pages/talp_report_ts.py | 16 +++++++++++++--- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/talp_pages/talp_badge.py b/talp_pages/talp_badge.py index 5e0158a..c98bbcf 100755 --- a/talp_pages/talp_badge.py +++ b/talp_pages/talp_badge.py @@ -76,10 +76,16 @@ def main(): parser.add_argument('-i', '--input', dest='input', help='Path to the TALP JSON file') parser.add_argument('-o', '--output', dest='output', help='Name of the svg file beeing generated. If not specified [input].svg will be chosen', required=False) - args = parser.parse_args() - - - output_file,input_file = _validate_inputs(args) + + # Parsing arguments + try: + args = parser.parse_args() + output_file, input_file = _validate_inputs(args) + except Exception as e: + logging.error(f"When parsing arguments ecountered the following error: {e}") + parser.print_help() + exit(1) + badge = TalpBadge(input_file) rendered_svg = badge.get_badge_svg() with open(output_file, 'wb') as f: diff --git a/talp_pages/talp_pages.py b/talp_pages/talp_pages.py index 45a7db6..6046b75 100755 --- a/talp_pages/talp_pages.py +++ b/talp_pages/talp_pages.py @@ -10,7 +10,8 @@ from .talp_report import TalpReport from .talp_report_ts import TalpTimeSeriesReport class TalpIndexPage: - def __init__(self,report,report_ts,badge): + def __init__(self,index,report,report_ts,badge): + self.index=index self.report=report self.report_ts=report_ts self.badge = badge @@ -20,8 +21,9 @@ class TalpIndexPage: return render_template( TALP_TEMPLATE_PATH, 'talp_index_page.jinja', - report=self.report, - report_ts=self.report_ts, + report_link=self.report, + report_ts_link=self.report_ts, + index_link=self.index, badge=self.badge, ) @@ -78,10 +80,14 @@ def main(): parser.add_argument('-p', '--prefix', dest='prefix', help=f"Prefix used in front of the (_){TALP_PAGES_REPORT_SITE}, (_){TALP_PAGES_TIME_SERIES_SITE} and (_){TALP_PAGES_INDEX_SITE}", required=False) # Parsing arguments - args = parser.parse_args() - - json_file,db_file,prefix = _verify_input(args) - + try: + args = parser.parse_args() + json_file,db_file,prefix = _verify_input(args) + except Exception as e: + logging.error(f"When parsing arguments ecountered the following error: {e}") + parser.print_help() + exit(1) + ouput_report_ts=_add_prefix(prefix,TALP_PAGES_TIME_SERIES_SITE) ouput_report=_add_prefix(prefix,TALP_PAGES_REPORT_SITE) badge_file=_add_prefix(prefix,TALP_PAGES_BAGDE) diff --git a/talp_pages/talp_report.py b/talp_pages/talp_report.py index fb9af40..f707e0b 100755 --- a/talp_pages/talp_report.py +++ b/talp_pages/talp_report.py @@ -62,15 +62,17 @@ def main(): parser.add_argument('-i', '--input', dest='input', help='Path to the TALP JSON file') parser.add_argument('-o', '--output', dest='output', help='Name of the html file beeing generated. If not specified [input].html will be chosen', required=False) - args = parser.parse_args() - - + # Parsing arguments + try: + args = parser.parse_args() + output_file, input_file = _validate_inputs(args) + except Exception as e: + logging.error(f"When parsing arguments ecountered the following error: {e}") + parser.print_help() + exit(1) - # Check if the popMetrics are there: - # Save or display the rendered HTML as needed - output_file,input_file = _validate_inputs(args) report = TalpReport(input_file) rendered_html = report.get_html() with open(output_file, 'w') as f: diff --git a/talp_pages/talp_report_ts.py b/talp_pages/talp_report_ts.py index 9f77a5a..b017147 100755 --- a/talp_pages/talp_report_ts.py +++ b/talp_pages/talp_report_ts.py @@ -135,9 +135,19 @@ def main(): help='Path to the TALP.db file') parser.add_argument('-o', '--output', dest='output', help='Name of the html file beeing generated. If not specified [input].html will be chosen', required=False) - args = parser.parse_args() - - output_file, input_file = _validate_inputs(args) + + + # Parsing arguments + try: + args = parser.parse_args() + output_file, input_file = _validate_inputs(args) + except Exception as e: + logging.error(f"When parsing arguments ecountered the following error: {e}") + parser.print_help() + exit(1) + + + timeseries = TalpTimeSeriesReport(input_file) rendered_html = timeseries.get_html() -- GitLab From 2501990a15a0a68661cd37080e6a1aa61adbcd37 Mon Sep 17 00:00:00 2001 From: Valentin Seitz Date: Thu, 9 May 2024 11:10:48 +0200 Subject: [PATCH 17/22] version 3.4.0-a0 --- pyproject.toml | 3 +- talp_pages/talp_common.py | 10 ++++++ talp_pages/talp_pages.py | 36 ++++++++------------- talp_pages/talp_report.py | 10 +++--- talp_pages/talp_report_ts.py | 11 ++++--- talp_pages/templates/talp_index_page.jinja | 8 +++-- talp_pages/templates/talp_report.jinja | 8 +++-- talp_pages/templates/talp_time_series.jinja | 8 +++-- tests/test_index_page.py | 9 +++--- tests/test_report.py | 4 ++- tests/test_report_ts.py | 5 +-- 11 files changed, 63 insertions(+), 49 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f637c41..20a2eb4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,8 @@ classifiers = [ "Intended Audience :: Science/Research", "Operating System :: OS Independent", "Topic :: Scientific/Engineering :: Visualization", - "Topic :: System :: Distributed Computing"] + "Topic :: System :: Distributed Computing" +] homepage = "https://pm.bsc.es/gitlab/dlb/talp-pages/" repository= "https://pm.bsc.es/gitlab/dlb/talp-pages/" diff --git a/talp_pages/talp_common.py b/talp_pages/talp_common.py index f59c0fd..e1ab1a2 100644 --- a/talp_pages/talp_common.py +++ b/talp_pages/talp_common.py @@ -3,6 +3,7 @@ File declaring some global scoped variables we rely to be there in our scrips """ import pathlib from jinja2 import Environment, FileSystemLoader +from dataclasses import dataclass TALP_TABLE_NAME = "talp_data" TALP_DB_COLUMN_TALP_OUPUT = "talp_ouput" @@ -31,3 +32,12 @@ def render_template(directory, template_name, **context): def date_time_to_string(datetime): return datetime.strftime("%d.%m.%Y %H:%M") + + +@dataclass +class TalpRelativeLinks: + """Class to bundle the generated links in the html""" + home: str + report: str + report_ts: str + render_navbar: bool = False \ No newline at end of file diff --git a/talp_pages/talp_pages.py b/talp_pages/talp_pages.py index 6046b75..fd706da 100755 --- a/talp_pages/talp_pages.py +++ b/talp_pages/talp_pages.py @@ -4,27 +4,19 @@ import argparse import os import logging -from .talp_common import TALP_PAGES_INDEX_SITE, TALP_PAGES_REPORT_SITE, TALP_PAGES_TIME_SERIES_SITE, TALP_PAGES_BAGDE, render_template, TALP_TEMPLATE_PATH +from .talp_common import TALP_PAGES_INDEX_SITE, TALP_PAGES_REPORT_SITE, TALP_PAGES_TIME_SERIES_SITE, TALP_PAGES_BAGDE, render_template, TALP_TEMPLATE_PATH, TalpRelativeLinks from .talp_badge import TalpBadge from .talp_report import TalpReport from .talp_report_ts import TalpTimeSeriesReport class TalpIndexPage: - def __init__(self,index,report,report_ts,badge): - self.index=index - self.report=report - self.report_ts=report_ts - self.badge = badge - def get_html(self): + def get_html(self,links:TalpRelativeLinks): return render_template( TALP_TEMPLATE_PATH, 'talp_index_page.jinja', - report_link=self.report, - report_ts_link=self.report_ts, - index_link=self.index, - badge=self.badge, + links=vars(links), ) @@ -88,24 +80,24 @@ def main(): parser.print_help() exit(1) - ouput_report_ts=_add_prefix(prefix,TALP_PAGES_TIME_SERIES_SITE) - ouput_report=_add_prefix(prefix,TALP_PAGES_REPORT_SITE) + output_report_ts=_add_prefix(prefix,TALP_PAGES_TIME_SERIES_SITE) + output_report=_add_prefix(prefix,TALP_PAGES_REPORT_SITE) badge_file=_add_prefix(prefix,TALP_PAGES_BAGDE) - ouput_index=_add_prefix(prefix,TALP_PAGES_INDEX_SITE) - - index = TalpIndexPage(ouput_report,ouput_report_ts,badge_file) + output_index=_add_prefix(prefix,TALP_PAGES_INDEX_SITE) + links=TalpRelativeLinks(output_index,output_report,output_report_ts,render_navbar=True) + index = TalpIndexPage() report_ts= TalpTimeSeriesReport(db_file) report = TalpReport(json_file) bagde = TalpBadge(json_file) - with open(ouput_index, 'w') as f: - f.write(index.get_html()) + with open(output_index, 'w') as f: + f.write(index.get_html(links)) - with open(ouput_report_ts, 'w') as f: - f.write(report_ts.get_html()) + with open(output_report_ts, 'w') as f: + f.write(report_ts.get_html(links)) - with open(ouput_report, 'w') as f: - f.write(report.get_html()) + with open(output_report, 'w') as f: + f.write(report.get_html(links)) with open(badge_file, 'wb') as f: f.write(bagde.get_badge_svg()) diff --git a/talp_pages/talp_report.py b/talp_pages/talp_report.py index f707e0b..444dcae 100755 --- a/talp_pages/talp_report.py +++ b/talp_pages/talp_report.py @@ -5,7 +5,7 @@ import json import os from urllib.request import urlopen, Request import logging -from .talp_common import TALP_TEMPLATE_PATH,render_template,TALP_POP_METRICS_KEY +from .talp_common import TALP_TEMPLATE_PATH,render_template,TALP_POP_METRICS_KEY,TalpRelativeLinks class TalpReport: def __init__(self, talp_file): @@ -21,11 +21,11 @@ class TalpReport: raise Exception(f"No {TALP_POP_METRICS_KEY} found") - def get_html(self): + def get_html(self,links: TalpRelativeLinks): pop_metric_regions = self.raw_data[TALP_POP_METRICS_KEY] # Render the template with the data return render_template( - TALP_TEMPLATE_PATH, 'talp_report.jinja', regions=pop_metric_regions) + TALP_TEMPLATE_PATH, 'talp_report.jinja', regions=pop_metric_regions,links=vars(links)) @@ -72,9 +72,9 @@ def main(): parser.print_help() exit(1) - + links=TalpRelativeLinks(output_file,output_file,output_file) report = TalpReport(input_file) - rendered_html = report.get_html() + rendered_html = report.get_html(links) with open(output_file, 'w') as f: f.write(rendered_html) diff --git a/talp_pages/talp_report_ts.py b/talp_pages/talp_report_ts.py index b017147..58c97ea 100755 --- a/talp_pages/talp_report_ts.py +++ b/talp_pages/talp_report_ts.py @@ -8,7 +8,7 @@ import logging import sqlite3 from datetime import datetime -from .talp_common import TALP_DB_COLUMN_METADATA, TALP_DB_COLUMN_TALP_OUPUT, TALP_DB_COLUMN_TIMESTAMP, TALP_DEFAULT_REGION_NAME, TALP_TABLE_NAME, TALP_TEMPLATE_PATH, TALP_POP_METRICS_KEY, date_time_to_string, render_template +from .talp_common import TALP_DB_COLUMN_METADATA, TALP_DB_COLUMN_TALP_OUPUT, TALP_DB_COLUMN_TIMESTAMP, TALP_DEFAULT_REGION_NAME, TALP_TABLE_NAME, TALP_TEMPLATE_PATH, TALP_POP_METRICS_KEY, date_time_to_string, render_template, TalpRelativeLinks class TalpTimeSeriesReport: @@ -81,7 +81,7 @@ class TalpTimeSeriesReport: series.append(self._pack_series_data(region, data)) return series - def get_html(self): + def get_html(self,links: TalpRelativeLinks): # Render the template with the data region_names = self._extract_region_names_from_df() metadata = self._extract_metadata_from_df() @@ -96,7 +96,8 @@ class TalpTimeSeriesReport: pe_series=pe_series, et_series=et_series, ipc_series=ipc_series, - default_region_name=TALP_DEFAULT_REGION_NAME) + default_region_name=TALP_DEFAULT_REGION_NAME, + links=vars(links)) def _validate_inputs(args): @@ -147,9 +148,9 @@ def main(): exit(1) - + links=TalpRelativeLinks(output_file,output_file,output_file) timeseries = TalpTimeSeriesReport(input_file) - rendered_html = timeseries.get_html() + rendered_html = timeseries.get_html(links) # Save or display the rendered HTML as needed with open(output_file, 'w') as f: diff --git a/talp_pages/templates/talp_index_page.jinja b/talp_pages/templates/talp_index_page.jinja index a1b4ece..3dc39b6 100644 --- a/talp_pages/templates/talp_index_page.jinja +++ b/talp_pages/templates/talp_index_page.jinja @@ -27,26 +27,28 @@ + {% if links.render_navbar %}