summaryrefslogtreecommitdiffstats
path: root/packaging/cmake/Modules/NetdataDashboard.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/cmake/Modules/NetdataDashboard.cmake')
-rw-r--r--packaging/cmake/Modules/NetdataDashboard.cmake85
1 files changed, 85 insertions, 0 deletions
diff --git a/packaging/cmake/Modules/NetdataDashboard.cmake b/packaging/cmake/Modules/NetdataDashboard.cmake
new file mode 100644
index 00000000..070ce18e
--- /dev/null
+++ b/packaging/cmake/Modules/NetdataDashboard.cmake
@@ -0,0 +1,85 @@
+# CMake module to handle fetching and installing the dashboard code
+#
+# Copyright (c) 2024 Netdata Inc.
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+include(NetdataUtil)
+
+function(handle_braindead_versioning_insanity prefix)
+ if(IS_DIRECTORY "${prefix}/v2" AND NOT IS_DIRECTORY "${prefix}/v3")
+ message(STATUS " Fixing incorrectly versioned paths generated by poorly written CI")
+ file(RENAME "${prefix}/v2" "${prefix}/v3")
+
+ if(IS_DIRECTORY "${prefix}/v3" AND NOT IS_DIRECTORY "${prefix}/v2")
+ message(STATUS " Fixing incorrectly versioned paths generated by poorly written CI -- Done")
+ else()
+ message(FATAL_ERROR "Failed to fix incorrectly versioned paths")
+ endif()
+ endif()
+endfunction()
+
+# Bundle the dashboard code for inclusion during install.
+#
+# This is unfortunately complicated due to how we need to handle the
+# generation of the CMakeLists file for the dashboard code.
+function(bundle_dashboard)
+ include(ExternalProject)
+
+ set(dashboard_src_dir "${CMAKE_BINARY_DIR}/dashboard-src")
+ set(dashboard_src_prefix "${dashboard_src_dir}/dist/agent")
+ set(dashboard_bin_dir "${CMAKE_BINARY_DIR}/dashboard-bin")
+ set(DASHBOARD_URL "https://app.netdata.cloud/agent.tar.gz" CACHE STRING
+ "URL used to fetch the local agent dashboard code")
+
+ message(STATUS "Preparing local agent dashboard code")
+
+ message(STATUS " Fetching ${DASHBOARD_URL}")
+ file(DOWNLOAD
+ "${DASHBOARD_URL}"
+ "${CMAKE_BINARY_DIR}/dashboard.tar.gz"
+ TIMEOUT 180
+ STATUS fetch_status)
+
+ list(GET fetch_status 0 result)
+
+ if(result)
+ message(FATAL_ERROR "Failed to fetch dashboard code")
+ else()
+ message(STATUS " Fetching ${DASHBOARD_URL} -- Done")
+ endif()
+
+ message(STATUS " Extracting dashboard code")
+ extract_gzipped_tarball(
+ "${CMAKE_BINARY_DIR}/dashboard.tar.gz"
+ "${dashboard_src_dir}"
+ )
+ message(STATUS " Extracting dashboard code -- Done")
+
+ handle_braindead_versioning_insanity("${dashboard_src_prefix}")
+
+ message(STATUS " Generating CMakeLists.txt file for dashboard code")
+ set(rules "")
+
+ subdirlist(dash_dirs "${dashboard_src_prefix}")
+
+ foreach(dir IN LISTS dash_dirs)
+ file(GLOB files
+ LIST_DIRECTORIES FALSE
+ RELATIVE "${dashboard_src_dir}"
+ "${dashboard_src_prefix}/${dir}/*")
+
+ set(rules "${rules}install(FILES ${files} COMPONENT dashboard DESTINATION ${WEB_DEST}/${dir})\n")
+ endforeach()
+
+ file(GLOB files
+ LIST_DIRECTORIES FALSE
+ RELATIVE "${dashboard_src_dir}"
+ "${dashboard_src_prefix}/*")
+
+ set(rules "${rules}install(FILES ${files} COMPONENT dashboard DESTINATION ${WEB_DEST})\n")
+
+ file(WRITE "${dashboard_src_dir}/CMakeLists.txt" "${rules}")
+ message(STATUS " Generating CMakeLists.txt file for dashboard code -- Done")
+ add_subdirectory("${dashboard_src_dir}" "${dashboard_bin_dir}")
+ message(STATUS "Preparing local agent dashboard code -- Done")
+endfunction()