diff --git a/src/tools/db-generator/LmsDbGenerator.cpp b/src/tools/db-generator/LmsDbGenerator.cpp index 93e7a9e0..8f264c22 100644 --- a/src/tools/db-generator/LmsDbGenerator.cpp +++ b/src/tools/db-generator/LmsDbGenerator.cpp @@ -31,6 +31,7 @@ #include "database/Db.hpp" #include "database/Artist.hpp" #include "database/Cluster.hpp" +#include "database/MediaLibrary.hpp" #include "database/Release.hpp" #include "database/Session.hpp" #include "database/Track.hpp" @@ -45,6 +46,7 @@ namespace { struct GeneratorParameters { + std::size_t mediaLibraryCount{ 1 }; std::size_t releaseCountPerBatch{ 1000 }; std::size_t releaseCount{ 100 }; std::size_t trackCountPerRelease{ 10 }; @@ -59,6 +61,7 @@ namespace struct GenerationContext { Database::Session& session; + std::vector mediaLibraries; std::vector genres; std::vector moods; GenerationContext(Database::Session& _session) : session{ _session } {} @@ -99,13 +102,17 @@ namespace track.modify()->setTrackMBID(UUID::generate()); track.modify()->setRecordingMBID(UUID::generate()); track.modify()->setTotalTrack(params.trackCountPerRelease); + if (!context.mediaLibraries.empty()) + track.modify()->setMediaLibrary(*Random::pickRandom(context.mediaLibraries)); TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::Artist); TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist); std::vector> clusters; - clusters.push_back(*Random::pickRandom(context.genres)); - clusters.push_back(*Random::pickRandom(context.moods)); + if (!context.genres.empty()) + clusters.push_back(*Random::pickRandom(context.genres)); + if (!context.moods.empty()) + clusters.push_back(*Random::pickRandom(context.moods)); track.modify()->setClusters(clusters); } } @@ -128,6 +135,10 @@ namespace { auto transaction{ context.session.createWriteTransaction() }; + // create some random media libraries + for (std::size_t i{}; i < params.mediaLibraryCount; ++i) + context.mediaLibraries.push_back(context.session.create()); + // create some random genres/moods { Database::ClusterType::pointer genre{ Database::ClusterType::find(context.session, "GENRE") }; @@ -163,6 +174,7 @@ int main(int argc, char* argv[]) po::options_description options{ "Options" }; options.add_options() ("conf,c", po::value()->default_value("/etc/lms.conf"), "lms config file") + ("media-library-count", po::value()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use") ("release-count-per-batch", po::value()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction") ("release-count", po::value()->default_value(defaultParams.releaseCount), "Number of releases to generate") ("track-count-per-release", po::value()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release") @@ -187,6 +199,7 @@ int main(int argc, char* argv[]) po::notify(vm); GeneratorParameters genParams; + genParams.mediaLibraryCount = vm["media-library-count"].as(); genParams.releaseCountPerBatch = vm["release-count-per-batch"].as(); genParams.releaseCount = vm["release-count"].as(); genParams.trackCountPerRelease = vm["track-count-per-release"].as(); diff --git a/src/tools/subsonic-api-bench/search3.sh b/src/tools/subsonic-api-bench/search3.sh index 400a59c2..8a72e923 100755 --- a/src/tools/subsonic-api-bench/search3.sh +++ b/src/tools/subsonic-api-bench/search3.sh @@ -1,7 +1,7 @@ #!/bin/bash -if [ "$#" -ne 6 ]; then - echo "Usage: $0 " +if [ "$#" -lt 6 ] || [ "$#" -gt 7 ]; then + echo "Usage: $0 [musicFolderId]" exit 1 fi @@ -19,25 +19,41 @@ album_count="$4" song_count="$5" batch_size="$6" +music_folder_id="" +if [ "$#" -eq 7 ]; then + music_folder_id="$7" +fi + +append_music_folder() { + local url="$1" + if [ -n "$music_folder_id" ]; then + url="$url&musicFolderId=$music_folder_id" + fi + echo "$url" +} + start_time=$(date +%s.%3N) # artists +echo "Fetching $artist_count artists..." for ((i = 0; i < artist_count; i += $batch_size)); do - wget -q -O - "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=$batch_size&artistOffset=$i&albumCount=0&songCount=0" > /dev/null + wget -q -O - "$(append_music_folder "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=$batch_size&artistOffset=$i&albumCount=0&songCount=0")" > /dev/null done # albums +echo "Fetching $album_count albums..." for ((i = 0; i < album_count; i += $batch_size)); do - wget -q -O - "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=0&albumCount=$batch_size&albumOffset=$i&songCount=0" > /dev/null + wget -q -O - "$(append_music_folder "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=0&albumCount=$batch_size&albumOffset=$i&songCount=0")" > /dev/null done # songs +echo "Fetching $song_count songs..." for ((i = 0; i < song_count; i += $batch_size)); do - wget -q -O - "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=0&albumCount=0&songCount=$batch_size&songOffset=$i" > /dev/null + wget -q -O - "$(append_music_folder "$base_url/rest/search3.view?u=$user&p=$user_password&v=1.13.0&c=benchmark&f=json&query=&artistCount=0&albumCount=0&songCount=$batch_size&songOffset=$i")" > /dev/null done end_time=$(date +%s.%3N) elapsed_time=$(echo "$end_time - $start_time" | bc) -echo "Fetch time: $elapsed_time seconds" \ No newline at end of file +echo "Fetch time: $elapsed_time seconds"