diff --git a/server/stats.go b/server/stats.go index 19b5033..933ae77 100644 --- a/server/stats.go +++ b/server/stats.go @@ -87,6 +87,50 @@ func generateStats(ctx context.Context) ([]ChartData, error) { } data = append(data, generatePie("Codecs", res)) + rows, err = db.Query(ctx, + `SELECT COALESCE(jsonb_path_query_first(ffprobe_data, '$.streams[*] ? (@.codec_type == "video") ? (@.disposition.attached_pic == 0).width')::text, 'Unknown') AS name, COUNT(*) AS value + FROM files + WHERE ffprobe_data IS NOT NULL + GROUP BY jsonb_path_query_first(ffprobe_data, '$.streams[*] ? (@.codec_type == "video") ? (@.disposition.attached_pic == 0).width');`) + if err != nil { + return nil, fmt.Errorf("Query Resolution: %w", err) + } + + resolutionCounts, err := pgx.CollectRows(rows, pgx.RowToStructByName[PieValue]) + if err != nil { + return nil, fmt.Errorf("Collect Codec Data: %w", err) + } + res = []opts.PieData{} + for _, v := range resolutionCounts { + res = append(res, opts.PieData{ + Name: strings.ReplaceAll(v.Name, "\"", ""), + Value: v.Value, + }) + } + data = append(data, generatePie("Resolution", res)) + + rows, err = db.Query(ctx, + `SELECT COALESCE(jsonb_path_query_first(ffprobe_data, '$.format.format_name')::text, 'Unknown') AS name, COUNT(*) AS value + FROM files + WHERE ffprobe_data IS NOT NULL + GROUP BY jsonb_path_query_first(ffprobe_data, '$.format.format_name');`) + if err != nil { + return nil, fmt.Errorf("Query Container: %w", err) + } + + containerCounts, err := pgx.CollectRows(rows, pgx.RowToStructByName[PieValue]) + if err != nil { + return nil, fmt.Errorf("Collect Container Data: %w", err) + } + res = []opts.PieData{} + for _, v := range containerCounts { + res = append(res, opts.PieData{ + Name: strings.ReplaceAll(v.Name, "\"", ""), + Value: v.Value, + }) + } + data = append(data, generatePie("Container", res)) + rows, err = db.Query(ctx, `SELECT health AS id, COUNT(*) AS value FROM files