public OpResult ExecuteLibraryStats(ServerSettings settings) { if (cacheLock.TryEnterReadLock(0)) { OpResult opResult = new OpResult(); opResult.StatusCode = OpStatusCode.Success; LibraryStats library_stats = new LibraryStats(); try { int[] list_codes = new int[] { MusicCmd.LIST_ALBUMS, MusicCmd.LIST_ALBUM_ARTISTS, MusicCmd.LIST_ARTISTS, MusicCmd.LIST_GENRES, MusicCmd.LIST_DETAILS, MusicCmd.LIST_PLAYLISTS }; foreach (int i in list_codes) { MusicCmd cmd = new MusicCmd(i); switch (i) { case MusicCmd.LIST_ALBUMS: library_stats.albums = cmd.ExecuteStats().ResultCount; break; case MusicCmd.LIST_ALBUM_ARTISTS: library_stats.album_artists = cmd.ExecuteStats().ResultCount; break; case MusicCmd.LIST_ARTISTS: library_stats.artists = cmd.ExecuteStats().ResultCount; break; case MusicCmd.LIST_GENRES: library_stats.genres = cmd.ExecuteStats().ResultCount; break; case MusicCmd.LIST_DETAILS: library_stats.songs = cmd.ExecuteStats().ResultCount; break; case MusicCmd.LIST_PLAYLISTS: library_stats.playlists = cmd.ExecuteStats().ResultCount; break; } } } finally { cacheLock.ExitReadLock(); } opResult.ContentObject = library_stats; return(opResult); } else { return(getSettings(settings, true)); } }
public Task <OperationResult <LibraryStats> > LibraryStatistics() { LibraryStats result = null; var sw = new Stopwatch(); sw.Start(); try { result = new LibraryStats { UserCount = DbContext.Users.Count(), CollectionCount = DbContext.Collections.Count(), PlaylistCount = DbContext.Playlists.Count(), ArtistCount = DbContext.Artists.Count(), LabelCount = DbContext.Labels.Count(), ReleaseCount = DbContext.Releases.Count(), ReleaseMediaCount = DbContext.ReleaseMedias.Count() }; result.PlayedCount = DbContext.UserTracks.Sum(x => x.PlayedCount); var tracks = DbContext.Tracks.Where(x => x.Hash != null); result.TrackCount = tracks.Count(); result.TotalTrackDuration = tracks.Sum(x => (long?)x.Duration); result.TotalTrackSize = tracks.Sum(x => (long?)x.FileSize); var lastScan = DbContext.ScanHistories.OrderByDescending(x => x.CreatedDate).FirstOrDefault(); result.LastScan = lastScan?.CreatedDate; sw.Stop(); } catch (Exception ex) { Logger.LogError(ex); } return(Task.FromResult(new OperationResult <LibraryStats> { OperationTime = sw.ElapsedMilliseconds, IsSuccess = result != null, Data = result })); }
private OpResult getLibraryStats() { OpResult opResult = new OpResult(); opResult.StatusCode = OpStatusCode.Json; int[] list_codes = new int[] {MusicCmd.LIST_ALBUMS, MusicCmd.LIST_ALBUM_ARTISTS, MusicCmd.LIST_ARTISTS, MusicCmd.LIST_GENRES, MusicCmd.LIST_DETAILS, MusicCmd.LIST_PLAYLISTS}; LibraryStats library_stats = new LibraryStats(); foreach (int i in list_codes) { MusicCmd cmd = new MusicCmd(i); cmd.setStatsOnly(); switch (i) { case MusicCmd.LIST_ALBUMS: library_stats.albums = cmd.Execute("").ResultCount; break; case MusicCmd.LIST_ALBUM_ARTISTS: library_stats.album_artists = cmd.Execute("").ResultCount; break; case MusicCmd.LIST_ARTISTS: library_stats.artists = cmd.Execute("").ResultCount; break; case MusicCmd.LIST_GENRES: library_stats.genres = cmd.Execute("").ResultCount; break; case MusicCmd.LIST_DETAILS: library_stats.songs = cmd.Execute("").ResultCount; break; case MusicCmd.LIST_PLAYLISTS: library_stats.playlists = cmd.Execute("").ResultCount; break; } } opResult.ContentText = JsonConvert.SerializeObject(library_stats, Newtonsoft.Json.Formatting.Indented); return opResult; }
public async Task <OperationResult <LibraryStats> > LibraryStatistics() { LibraryStats result = null; var sw = new Stopwatch(); sw.Start(); try { using (var conn = new MySqlConnection(this.Configuration.ConnectionString)) { conn.Open(); var sql = @"SELECT rm.releaseMediaCount AS releaseMediaCount, COUNT(r.roadieId) AS releaseCount, ts.trackCount, ts.trackDuration as TotalTrackDuration, ts.trackSize as TotalTrackSize, ac.artistCount, lc.labelCount, pc.playedCount, uc.userCount, cc.collectionCount, pl.playlistCount FROM `release` r INNER JOIN ( SELECT COUNT(1) AS trackCount, SUM(t.duration) AS trackDuration, SUM(t.fileSize) AS trackSize FROM `track` t JOIN `releasemedia` rm ON rm.id = t.releaseMediaId JOIN `release` r ON r.id = rm.releaseId JOIN `artist` a ON a.id = r.artistId WHERE t.hash IS NOT NULL) ts INNER JOIN ( SELECT COUNT(1) AS artistCount FROM `artist`) ac INNER JOIN ( SELECT COUNT(1) AS labelCount FROM `label`) lc INNER JOIN ( SELECT SUM(playedCount) as playedCount FROM `usertrack`) pc INNER JOIN ( SELECT COUNT(1) as releaseMediaCount FROM `releasemedia`) rm INNER JOIN ( SELECT COUNT(1) as userCount FROM `user`) uc INNER JOIN ( SELECT COUNT(1) as collectionCount FROM `collection`) cc INNER JOIN ( SELECT COUNT(1) as playlistCount FROM `playlist`) pl;" ; using (var cmd = new MySqlCommand(sql, conn)) { try { using (var rdr = await cmd.ExecuteReaderAsync()) { if (rdr.HasRows) { while (rdr.Read()) { result = new LibraryStats { UserCount = SafeParser.ToNumber <int?>(rdr["UserCount"]), CollectionCount = SafeParser.ToNumber <int?>(rdr["CollectionCount"]), PlaylistCount = SafeParser.ToNumber <int?>(rdr["PlaylistCount"]), ArtistCount = SafeParser.ToNumber <int?>(rdr["ArtistCount"]), LabelCount = SafeParser.ToNumber <int?>(rdr["LabelCount"]), ReleaseCount = SafeParser.ToNumber <int?>(rdr["ReleaseCount"]), ReleaseMediaCount = SafeParser.ToNumber <int?>(rdr["ReleaseMediaCount"]), PlayedCount = SafeParser.ToNumber <int?>(rdr["PlayedCount"]), TrackCount = SafeParser.ToNumber <int?>(rdr["TrackCount"]), TotalTrackDuration = SafeParser.ToNumber <long?>(rdr["TotalTrackDuration"]), TotalTrackSize = SafeParser.ToNumber <long?>(rdr["TotalTrackSize"]) }; } } } } catch (Exception ex) { this.Logger.LogError(ex); } finally { conn.Close(); } } } var lastScan = this.DbContext.ScanHistories.OrderByDescending(x => x.CreatedDate).FirstOrDefault(); if (lastScan != null) { result.LastScan = lastScan.CreatedDate; } sw.Stop(); } catch (Exception ex) { this.Logger.LogError(ex); } return(new OperationResult <LibraryStats> { IsSuccess = result != null, OperationTime = sw.ElapsedMilliseconds, Data = result }); }