Added media library params to the db generator and subsonic api bench
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include "database/Db.hpp"
|
#include "database/Db.hpp"
|
||||||
#include "database/Artist.hpp"
|
#include "database/Artist.hpp"
|
||||||
#include "database/Cluster.hpp"
|
#include "database/Cluster.hpp"
|
||||||
|
#include "database/MediaLibrary.hpp"
|
||||||
#include "database/Release.hpp"
|
#include "database/Release.hpp"
|
||||||
#include "database/Session.hpp"
|
#include "database/Session.hpp"
|
||||||
#include "database/Track.hpp"
|
#include "database/Track.hpp"
|
||||||
@@ -45,6 +46,7 @@ namespace
|
|||||||
{
|
{
|
||||||
struct GeneratorParameters
|
struct GeneratorParameters
|
||||||
{
|
{
|
||||||
|
std::size_t mediaLibraryCount{ 1 };
|
||||||
std::size_t releaseCountPerBatch{ 1000 };
|
std::size_t releaseCountPerBatch{ 1000 };
|
||||||
std::size_t releaseCount{ 100 };
|
std::size_t releaseCount{ 100 };
|
||||||
std::size_t trackCountPerRelease{ 10 };
|
std::size_t trackCountPerRelease{ 10 };
|
||||||
@@ -59,6 +61,7 @@ namespace
|
|||||||
struct GenerationContext
|
struct GenerationContext
|
||||||
{
|
{
|
||||||
Database::Session& session;
|
Database::Session& session;
|
||||||
|
std::vector<Database::MediaLibrary::pointer> mediaLibraries;
|
||||||
std::vector<Database::Cluster::pointer> genres;
|
std::vector<Database::Cluster::pointer> genres;
|
||||||
std::vector<Database::Cluster::pointer> moods;
|
std::vector<Database::Cluster::pointer> moods;
|
||||||
GenerationContext(Database::Session& _session) : session{ _session } {}
|
GenerationContext(Database::Session& _session) : session{ _session } {}
|
||||||
@@ -99,13 +102,17 @@ namespace
|
|||||||
track.modify()->setTrackMBID(UUID::generate());
|
track.modify()->setTrackMBID(UUID::generate());
|
||||||
track.modify()->setRecordingMBID(UUID::generate());
|
track.modify()->setRecordingMBID(UUID::generate());
|
||||||
track.modify()->setTotalTrack(params.trackCountPerRelease);
|
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::Artist);
|
||||||
TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist);
|
TrackArtistLink::create(context.session, track, artist, TrackArtistLinkType::ReleaseArtist);
|
||||||
|
|
||||||
std::vector<ObjectPtr<Cluster>> clusters;
|
std::vector<ObjectPtr<Cluster>> clusters;
|
||||||
clusters.push_back(*Random::pickRandom(context.genres));
|
if (!context.genres.empty())
|
||||||
clusters.push_back(*Random::pickRandom(context.moods));
|
clusters.push_back(*Random::pickRandom(context.genres));
|
||||||
|
if (!context.moods.empty())
|
||||||
|
clusters.push_back(*Random::pickRandom(context.moods));
|
||||||
track.modify()->setClusters(clusters);
|
track.modify()->setClusters(clusters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,6 +135,10 @@ namespace
|
|||||||
{
|
{
|
||||||
auto transaction{ context.session.createWriteTransaction() };
|
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<Database::MediaLibrary>());
|
||||||
|
|
||||||
// create some random genres/moods
|
// create some random genres/moods
|
||||||
{
|
{
|
||||||
Database::ClusterType::pointer genre{ Database::ClusterType::find(context.session, "GENRE") };
|
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" };
|
po::options_description options{ "Options" };
|
||||||
options.add_options()
|
options.add_options()
|
||||||
("conf,c", po::value<std::string>()->default_value("/etc/lms.conf"), "lms config file")
|
("conf,c", po::value<std::string>()->default_value("/etc/lms.conf"), "lms config file")
|
||||||
|
("media-library-count", po::value<unsigned>()->default_value(defaultParams.mediaLibraryCount), "Number of media libraries to use")
|
||||||
("release-count-per-batch", po::value<unsigned>()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction")
|
("release-count-per-batch", po::value<unsigned>()->default_value(defaultParams.releaseCountPerBatch), "Number of releases to generate before committing transaction")
|
||||||
("release-count", po::value<unsigned>()->default_value(defaultParams.releaseCount), "Number of releases to generate")
|
("release-count", po::value<unsigned>()->default_value(defaultParams.releaseCount), "Number of releases to generate")
|
||||||
("track-count-per-release", po::value<unsigned>()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release")
|
("track-count-per-release", po::value<unsigned>()->default_value(defaultParams.trackCountPerRelease), "Number of tracks per release")
|
||||||
@@ -187,6 +199,7 @@ int main(int argc, char* argv[])
|
|||||||
po::notify(vm);
|
po::notify(vm);
|
||||||
|
|
||||||
GeneratorParameters genParams;
|
GeneratorParameters genParams;
|
||||||
|
genParams.mediaLibraryCount = vm["media-library-count"].as<unsigned>();
|
||||||
genParams.releaseCountPerBatch = vm["release-count-per-batch"].as<unsigned>();
|
genParams.releaseCountPerBatch = vm["release-count-per-batch"].as<unsigned>();
|
||||||
genParams.releaseCount = vm["release-count"].as<unsigned>();
|
genParams.releaseCount = vm["release-count"].as<unsigned>();
|
||||||
genParams.trackCountPerRelease = vm["track-count-per-release"].as<unsigned>();
|
genParams.trackCountPerRelease = vm["track-count-per-release"].as<unsigned>();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ "$#" -ne 6 ]; then
|
if [ "$#" -lt 6 ] || [ "$#" -gt 7 ]; then
|
||||||
echo "Usage: $0 <base_url> <user> <artist_count> <album_count> <song_count> <batch_size>"
|
echo "Usage: $0 <base_url> <user> <artist_count> <album_count> <song_count> <batch_size> [musicFolderId]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -19,25 +19,41 @@ album_count="$4"
|
|||||||
song_count="$5"
|
song_count="$5"
|
||||||
batch_size="$6"
|
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)
|
start_time=$(date +%s.%3N)
|
||||||
|
|
||||||
# artists
|
# artists
|
||||||
|
echo "Fetching $artist_count artists..."
|
||||||
for ((i = 0; i < artist_count; i += $batch_size)); do
|
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
|
done
|
||||||
|
|
||||||
# albums
|
# albums
|
||||||
|
echo "Fetching $album_count albums..."
|
||||||
for ((i = 0; i < album_count; i += $batch_size)); do
|
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
|
done
|
||||||
|
|
||||||
# songs
|
# songs
|
||||||
|
echo "Fetching $song_count songs..."
|
||||||
for ((i = 0; i < song_count; i += $batch_size)); do
|
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
|
done
|
||||||
|
|
||||||
end_time=$(date +%s.%3N)
|
end_time=$(date +%s.%3N)
|
||||||
|
|
||||||
elapsed_time=$(echo "$end_time - $start_time" | bc)
|
elapsed_time=$(echo "$end_time - $start_time" | bc)
|
||||||
|
|
||||||
echo "Fetch time: $elapsed_time seconds"
|
echo "Fetch time: $elapsed_time seconds"
|
||||||
|
|||||||
Reference in New Issue
Block a user