@@ -64,6 +64,12 @@ var obb = {};
6464 pipeline . push ( { "$group" : { "_id" : null , "u" : { "$sum" : 1 } , "d" : { "$sum" : "$d" } , "t" : { "$sum" : "$t" } , "n" : { "$sum" : "$n" } } } ) ;
6565
6666 }
67+
68+ //Union with the one having [CLY]_session_begin.
69+ var copy_pipeline = JSON . parse ( JSON . stringify ( pipeline ) ) ;
70+ copy_pipeline [ 0 ] . $match . e = "[CLY]_session_begin" ;
71+ pipeline . push ( { "$unionWith" : { "coll" : "drill_events" , "pipeline" : copy_pipeline } } ) ;
72+ pipeline . push ( { "$group" : { "_id" : "$_id" , "u" : { "$max" : "$u" } , "d" : { "$max" : "$d" } , "t" : { "$max" : "$t" } , "n" : { "$max" : "$n" } } } ) ;
6773 var data = await common . drillDb . collection ( "drill_events" ) . aggregate ( pipeline ) . toArray ( ) ;
6874 for ( var z = 0 ; z < data . length ; z ++ ) {
6975 // data[z]._id = data[z]._id.replaceAll(/\:0/gi, ":");
@@ -158,5 +164,68 @@ var obb = {};
158164 //Group by hour
159165 } ;
160166
167+
168+ agg . getViewsTableData = async function ( options ) {
169+ var match = options . dbFilter || { } ;
170+ if ( options . appID ) {
171+ match . a = options . appID + "" ;
172+ }
173+ match . e = "[CLY]_view" ;
174+ if ( options . period ) {
175+ match . ts = countlyCommon . getPeriodRange ( options . period , "UTC" , options . periodOffset ) ;
176+ }
177+
178+ var pipeline = [ ] ;
179+ pipeline . push ( { "$match" : match } ) ;
180+ pipeline . push ( { "$group" : { "_id" : { "u" : "$uid" , "sg" : "$n" } , "t" : { "$sum" : 1 } , "d" : { "$sum" : "$dur" } , "s" : { "$sum" : "$sg.visit" } , "e" : { "$sum" : "$sg.exit" } , "b" : { "$sum" : "$sg.bounce" } } } ) ;
181+ pipeline . push ( { "$addFields" : { "u" : 1 } } ) ;
182+ //Union with cly action
183+ pipeline . push ( {
184+ "$unionWith" : {
185+ "coll" : "drill_events" ,
186+ "pipeline" : [
187+ { "$match" : { "e" : "[CLY]_action" , "sg.type" : "scroll" , "ts" : match . ts , "a" : match . a } } ,
188+ { "$group" : { "_id" : { "u" : "$uid" , "sg" : "$n" } , "scr" : { "$sum" : "$sg.scr" } } }
189+ ]
190+ }
191+ } ) ;
192+ pipeline . push ( { "$group" : { "_id" : "$_id.sg" , "u" : { "$sum" : "$u" } , "t" : { "$sum" : "$t" } , "d" : { "$sum" : "$d" } , "s" : { "$sum" : "$s" } , "e" : { "$sum" : "$e" } , "b" : { "$sum" : "$b" } , "scr" : { "$sum" : "$scr" } } } ) ;
193+
194+ //Union with data from view updates and group by _id.sg
195+ var match2 = JSON . parse ( JSON . stringify ( match ) ) ;
196+ match2 . e = "[CLY]_view_update" ;
197+ var pipeline2 = [
198+ { "$match" : match2 } ,
199+ { "$group" : { "_id" : { "u" : "$uid" , "sg" : "$n" } , "t" : { "$sum" : 0 } , "d" : { "$sum" : "$dur" } , "s" : { "$sum" : 0 } , "e" : { "$sum" : "$sg.exit" } , "b" : { "$sum" : "$sg.bounce" } , "scr" : { "$sum" : 0 } , "u" : { "$sum" : 1 } } } , //t and scr are 0 as they are not tracked in view update
200+ { "$group" : { "_id" : "$_id.sg" , "u" : { "$sum" : "$u" } , "t" : { "$sum" : "$t" } , "d" : { "$sum" : "$d" } , "s" : { "$sum" : "$s" } , "e" : { "$sum" : "$e" } , "b" : { "$sum" : "$b" } , "scr" : { "$sum" : "$scr" } } }
201+ ] ;
202+
203+ pipeline . push ( { "$unionWith" : { "coll" : "drill_events" , "pipeline" : pipeline2 } } ) ;
204+ pipeline . push ( { "$group" : { "_id" : "$_id" , "u" : { "$max" : "$u" } , "t" : { "$max" : "$t" } , "d" : { "$max" : "$d" } , "s" : { "$max" : "$s" } , "e" : { "$max" : "$e" } , "b" : { "$max" : "$b" } , "scr" : { "$max" : "$scr" } } } ) ;
205+ pipeline . push ( {
206+ "$addFields" : {
207+ "scr-calc" : { $cond : [ { $or : [ { $eq : [ "$t" , 0 ] } , { $eq : [ '$scr' , 0 ] } ] } , 0 , { '$divide' : [ '$scr' , "$t" ] } ] } ,
208+ "d-calc" : { $cond : [ { $or : [ { $eq : [ "$t" , 0 ] } , { $eq : [ '$d' , 0 ] } ] } , 0 , { '$divide' : [ '$d' , "$t" ] } ] } ,
209+ "br" : { $cond : [ { $or : [ { $eq : [ "$s" , 0 ] } , { $eq : [ '$b' , 0 ] } ] } , 0 , { '$divide' : [ { "$min" : [ '$b' , "$s" ] } , "$s" ] } ] } ,
210+ "b" : { "$min" : [ { "$ifNull" : [ "$b" , 0 ] } , { "$ifNull" : [ "$s" , 0 ] } ] } ,
211+ "view" : "$_id"
212+ }
213+ } ) ;
214+ var data = await common . drillDb . collection ( "drill_events" ) . aggregate ( pipeline ) . toArray ( ) ;
215+ for ( var z = 0 ; z < data . length ; z ++ ) {
216+ data [ z ] . _id = data [ z ] . _id . replaceAll ( / \: 0 / gi, ":" ) ;
217+ if ( data [ z ] . sg ) {
218+ data [ z ] . sg = data [ z ] . sg . replaceAll ( / \. / gi, ":" ) ;
219+ }
220+ }
221+ return {
222+ _queryMeta : {
223+ adapter : 'mongodb' ,
224+ query : pipeline || 'MongoDB event segmentation aggregation pipeline' ,
225+ } ,
226+ data : data
227+ } ;
228+ } ;
229+
161230} ( obb ) ) ;
162231module . exports = obb ;
0 commit comments