@@ -45,36 +45,37 @@ public Task StorePerfCounters(IEnumerable<IPerfCounterData> counters)
4545
4646 using ( var db = new LiteDatabase ( PathToDbFolder + dbName ) )
4747 {
48- // Get customer collection
49- foreach ( var counter in counters )
48+ using ( var trans = db . BeginTrans ( ) )
5049 {
51- try
50+ // Get customer collection
51+ foreach ( var counter in counters )
5252 {
53- var countersColl = db . GetCollection < PerfCounterValue > ( counter . Name . GetHashCode ( ) . ToString ( ) ) ;
54- var names = db . GetCollection ( "CounterNames" ) ;
55-
56- // Index document using a document property
57- //countersColl.EnsureIndex("Timestamp", true);
58-
59- var id = names . Find ( Query . EQ ( "Name" , counter . Name ) ) . FirstOrDefault ( ) ;
60- if ( id == null )
53+ try
6154 {
62- var doc = new BsonDocument ( ) ;
63- doc . Add ( "Name" , counter . Name ) ;
64- names . Insert ( doc ) ;
65- }
55+ var countersColl = db . GetCollection < PerfCounterValue > ( counter . Name . GetHashCode ( ) . ToString ( ) ) ;
56+ var names = db . GetCollection ( "CounterNames" ) ;
6657
67- var item = new PerfCounterValue ( now , counter . Value ) ;
58+ var id = names . Find ( Query . EQ ( "Name" , counter . Name ) ) . FirstOrDefault ( ) ;
59+ if ( id == null )
60+ {
61+ var doc = new BsonDocument ( ) ;
62+ doc . Add ( "Name" , counter . Name ) ;
63+ names . Insert ( doc ) ;
64+ }
6865
69- countersColl . Insert ( item ) ;
70- }
71- catch ( Exception exc )
72- {
73- if ( OnError != null )
66+ var item = new PerfCounterValue ( now , counter . Value ) ;
67+
68+ countersColl . Insert ( item ) ;
69+ }
70+ catch ( Exception exc )
7471 {
75- OnError ( new object ( ) , new ErrorEventArgs ( exc . ToString ( ) ) ) ;
72+ if ( OnError != null )
73+ {
74+ OnError ( new object ( ) , new ErrorEventArgs ( exc . ToString ( ) ) ) ;
75+ }
7676 }
7777 }
78+ trans . Commit ( ) ;
7879 }
7980 }
8081 }
@@ -89,7 +90,7 @@ public Task StorePerfCounters(IEnumerable<IPerfCounterData> counters)
8990 return Task . Delay ( 0 ) ;
9091 }
9192
92- public Task < IEnumerable < PerfCounterValue > > QueryCounterValues ( string counterName , DateTime ? date = null )
93+ public Task < IEnumerable < PerfCounterValue > > QueryCounterValues ( string counterName , DateTime ? date = null , int skip = 0 )
9394 {
9495 var list = new List < PerfCounterValue > ( ) ;
9596
@@ -102,14 +103,15 @@ public Task<IEnumerable<PerfCounterValue>> QueryCounterValues(string counterName
102103
103104 try
104105 {
105- var dbName = GetDbName ( date . Value ) ;
106-
107- using ( var db = new LiteDatabase ( PathToDbFolder + dbName ) )
106+ using ( var db = new LiteDatabase ( GetDbReadOnlyName ( date . Value ) ) )
108107 {
109- var countersColl = db . GetCollection < PerfCounterValue > ( counterName . GetHashCode ( ) . ToString ( ) ) ;
110-
111- list = countersColl . FindAll ( ) . Where ( a => a . Timestamp . Date == date ) . ToList ( ) ;
108+ list = db . Engine . Find ( counterName . GetHashCode ( ) . ToString ( ) , Query . GTE ( "Timestamp" , new BsonValue ( date ) ) , skip ) . Select ( a =>
109+ {
110+ return new PerfCounterValue ( a [ "Timestamp" ] . AsDateTime , ( float ) a [ "Value" ] . AsDouble ) ;
111+ } ) . ToList ( ) ;
112112
113+ //var countersColl = db.GetCollection<PerfCounterValue>(counterName.GetHashCode().ToString());
114+ //list = countersColl.FindAll().Where(a => a.Timestamp.Date == date).ToList();
113115 }
114116 }
115117 catch ( Exception exc )
@@ -135,14 +137,10 @@ public Task<IEnumerable<string>> GetCountersList()
135137
136138 using ( var db = new LiteDatabase ( PathToDbFolder + dbName ) )
137139 {
138- // Get customer collection
139- var names = db . GetCollection ( "CounterNames" ) ;
140-
141- // Index document using a document property
142- //countersColl.EnsureIndex("Timestamp", true);
143-
144- res = names . FindAll ( ) . Select ( a => a [ "Name" ] . AsString ) . ToList ( ) ;
140+ //var names = db.GetCollection("CounterNames");
141+ //res = names.FindAll().Select(a => a["Name"].AsString).ToList();
145142
143+ res = db . Engine . FindAll ( "CounterNames" ) . Select ( a => a [ "Name" ] . AsString ) . ToList ( ) ;
146144 }
147145 }
148146 catch ( Exception exc )
@@ -164,7 +162,12 @@ private static string GetDbName(DateTime now)
164162 {
165163 return "perfCounters_" + now . ToString ( "yyyy-MM-dd" ) + ".litedb" ;
166164 }
165+ private string GetDbReadOnlyName ( DateTime date )
166+ {
167+ return "Filename=" + PathToDbFolder + GetDbName ( date ) + ";Mode=ReadOnly;Timeout=" + TimeSpan . FromSeconds ( 30 ) ;
168+ }
167169
168170
171+
169172 }
170173}
0 commit comments