[banshee] Add Banshee pref to enable anon usage collection
- From: Gabriel Burt <gburt src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [banshee] Add Banshee pref to enable anon usage collection
- Date: Fri, 12 Feb 2010 06:20:39 +0000 (UTC)
commit 8c5e12b6f1b0943f6601cf9215caab33729e37dc
Author: Gabriel Burt <gabriel burt gmail com>
Date: Thu Feb 11 22:19:59 2010 -0800
Add Banshee pref to enable anon usage collection
.../Banshee.Metrics/BansheeMetrics.cs | 101 ++++++++++++++++++++
.../Banshee.Preferences/PreferenceService.cs | 13 +++-
src/Core/Banshee.Services/Banshee.Services.csproj | 1 +
src/Core/Banshee.Services/Makefile.am | 1 +
4 files changed, 115 insertions(+), 1 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Metrics/BansheeMetrics.cs b/src/Core/Banshee.Services/Banshee.Metrics/BansheeMetrics.cs
new file mode 100644
index 0000000..9f214b3
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Metrics/BansheeMetrics.cs
@@ -0,0 +1,101 @@
+//
+// BansheeMetrics.cs
+//
+// Author:
+// Gabriel Burt <gabriel burt gmail com>
+//
+// Copyright (c) 2010 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Linq;
+using Mono.Unix;
+
+using Hyena;
+using Hyena.Metrics;
+
+using Banshee.Configuration;
+using Banshee.ServiceStack;
+
+namespace Banshee.Metrics
+{
+ public class BansheeMetrics : IDisposable
+ {
+ private static BansheeMetrics banshee_metrics;
+
+ public static void Start ()
+ {
+ Log.Information ("Starting collection of anonymous usage data");
+ if (banshee_metrics == null) {
+ banshee_metrics = new BansheeMetrics ();
+ }
+ }
+
+ public static void Stop ()
+ {
+ Log.Information ("Stopping collection of anonymous usage data");
+ if (banshee_metrics != null) {
+ banshee_metrics.Dispose ();
+ banshee_metrics = null;
+ }
+ }
+
+ private MetricsCollection metrics;
+
+ private BansheeMetrics ()
+ {
+ string key = "AnonymousUsageData.Userid";
+ string unique_userid = DatabaseConfigurationClient.Client.Get<string> (key, null);
+
+ if (unique_userid == null) {
+ unique_userid = System.Guid.NewGuid ().ToString ();
+ DatabaseConfigurationClient.Client.Set<string> (key, unique_userid);
+ }
+
+ metrics = new MetricsCollection (unique_userid, new DbSampleStore (
+ ServiceManager.DbConnection, "AnonymousUsageData"
+ ));
+ metrics.AddDefaults ();
+
+ foreach (var metric in metrics) {
+ metric.TakeSample ();
+ }
+
+ // TODO remove this, just for testing
+ Log.InformationFormat ("Anonymous usage data collected:\n{0}", metrics.ToString ());
+
+ // TODO add Banshee-specific metrics
+ // TODO add Mono.Addins extension point for metric providers?
+ // TODO schedule sending the data to the server in some timeout?
+ }
+
+ public void Dispose ()
+ {
+ // Delete any collected data
+ metrics.Store.Clear ();
+ metrics = null;
+ }
+
+ public static SchemaEntry<bool> EnableCollection = new SchemaEntry<bool> (
+ "core", "send_anonymous_usage_data", false,
+ Catalog.GetString ("Improve Banshee by sending anonymous usage data"), null
+ );
+ }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
index 3b4d63d..fdba642 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/PreferenceService.cs
@@ -32,6 +32,7 @@ using Mono.Unix;
using Banshee.ServiceStack;
using Banshee.Library;
using Banshee.Configuration.Schema;
+using Banshee.Configuration;
namespace Banshee.Preferences
{
@@ -61,7 +62,17 @@ namespace Banshee.Preferences
policies.Add (Banshee.Metadata.SaveTrackMetadataService.RenameEnabled);
// Misc section
- general.Add (new Section ("misc", Catalog.GetString ("Miscellaneous"), 20));
+ var misc = new Section ("misc", Catalog.GetString ("Miscellaneous"), 20);
+ general.Add (misc);
+
+ var anon_data = misc.Add (Banshee.Metrics.BansheeMetrics.EnableCollection);
+ anon_data.ValueChanged += (o) => {
+ if (Banshee.Metrics.BansheeMetrics.EnableCollection.Get ()) {
+ Banshee.Metrics.BansheeMetrics.Start ();
+ } else {
+ Banshee.Metrics.BansheeMetrics.Stop ();
+ }
+ };
}
public void RequestWidgetAdapters ()
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index a5f61b4..c19319f 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -319,6 +319,7 @@
<Compile Include="Banshee.Library\Tests\FileNamePatternTests.cs" />
<Compile Include="Banshee.Collection.Database\ISearchable.cs" />
<Compile Include="Banshee.Library\MusicFileNamePattern.cs" />
+ <Compile Include="Banshee.Metrics\BansheeMetrics.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Banshee.Services.addin.xml">
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index cca613a..28f9073 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -122,6 +122,7 @@ SOURCES = \
Banshee.Metadata/SaveTrackMetadataJob.cs \
Banshee.Metadata/SaveTrackMetadataService.cs \
Banshee.Metadata/Tests/TaglibReadWriteTests.cs \
+ Banshee.Metrics/BansheeMetrics.cs \
Banshee.Networking/INetworkAvailabilityService.cs \
Banshee.Networking/Network.cs \
Banshee.Networking/NetworkManager.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]