1
+ var
2
+ path = require ( 'path' ) ,
3
+ fs = require ( 'fs' ) ,
4
+ ce = require ( 'cloneextend' ) ,
5
+ joola = require ( 'joola' ) ;
6
+
7
+ process . env . JOOLA_CONFIG_STORE_LOGGER_CONSOLE_LEVEL = 'trace' ;
8
+
9
+ joola . init ( { } , function ( err ) {
10
+ if ( err )
11
+ throw err ;
12
+
13
+ joola . users . verifyAPIToken ( { user : joola . SYSTEM_USER } , 'apitoken-demo' , function ( err , user ) {
14
+ if ( err )
15
+ throw err ;
16
+
17
+ global . user = user ;
18
+ joola . events . emit ( 'goahead' ) ;
19
+ } ) ;
20
+ } ) ;
21
+
22
+ joola . events . on ( 'goahead' , function ( ) {
23
+ var sources = [ ] ;
24
+ var dataPoints = [ ] ;
25
+ var files = fs . readdirSync ( path . join ( __dirname , './sources' ) ) ;
26
+ files . forEach ( function ( file ) {
27
+ joola . logger . info ( 'Require event source from: ./sources/' + file ) ;
28
+ sources . push ( require ( path . join ( __dirname , './sources' , file ) ) ) ;
29
+ } ) ;
30
+
31
+ setInterval ( function ( ) {
32
+ var points = generateRandomPoints ( {
33
+ 'lat' : 32.476664 ,
34
+ 'lon' : 34.974388
35
+ } , 5000 , 1 ) ;
36
+
37
+ points . forEach ( function ( point , i ) {
38
+ point . location = {
39
+ lat : point . lat ,
40
+ lon : point . lon
41
+ } ;
42
+ delete point . lat ;
43
+ delete point . lon ;
44
+ sources . forEach ( function ( s ) {
45
+ var _point = ce . extend ( point , s ) ;
46
+ Object . keys ( _point ) . forEach ( function ( key ) {
47
+ var elem = _point [ key ] . value ;
48
+ if ( typeof elem === 'function' ) {
49
+ _point [ key ] . value = elem . call ( this ) ;
50
+ }
51
+ } ) ;
52
+ if ( _point . _save . value ) {
53
+ delete _point . _save ;
54
+ dataPoints . push ( ce . clone ( _point ) ) ;
55
+ }
56
+ } ) ;
57
+ } ) ;
58
+ } , 100 ) ;
59
+
60
+ setInterval ( function ( ) {
61
+ //var transmission = {};
62
+ var slicedPoints = dataPoints . splice ( 0 , 1000 ) ;
63
+ if ( slicedPoints && slicedPoints . length > 0 ) {
64
+ joola . beacon . insert ( { user : user } , 'geo' , slicedPoints , function ( err ) {
65
+ if ( err )
66
+ throw err ;
67
+ } ) ;
68
+ }
69
+ } , 800 ) ;
70
+ } ) ;
71
+
72
+ //https://gist.github.com/mkhatib/5641004
73
+ /**
74
+ * Generates number of random geolocation points given a center and a radius.
75
+ * @param {Object } center A JS object with lat and lng attributes.
76
+ * @param {number } radius Radius in meters.
77
+ * @param {number } count Number of points to generate.
78
+ * @return {array } Array of Objects with lat and lng attributes.
79
+ */
80
+ function generateRandomPoints ( center , radius , count ) {
81
+ var points = [ ] ;
82
+ for ( var i = 0 ; i < count ; i ++ ) {
83
+ points . push ( generateRandomPoint ( center , radius ) ) ;
84
+ }
85
+ return points ;
86
+ }
87
+
88
+
89
+ /**
90
+ * Generates number of random geolocation points given a center and a radius.
91
+ * Reference URL: http://goo.gl/KWcPE.
92
+ * @param {Object } center A JS object with lat and lng attributes.
93
+ * @param {number } radius Radius in meters.
94
+ * @return {Object } The generated random points as JS object with lat and lng attributes.
95
+ */
96
+ function generateRandomPoint ( center , radius ) {
97
+ var x0 = center . lon ;
98
+ var y0 = center . lat ;
99
+ // Convert Radius from meters to degrees.
100
+ var rd = radius / 111300 ;
101
+
102
+ var u = Math . random ( ) ;
103
+ var v = Math . random ( ) ;
104
+
105
+ var w = rd * Math . sqrt ( u ) ;
106
+ var t = 2 * Math . PI * v ;
107
+ var x = w * Math . cos ( t ) ;
108
+ var y = w * Math . sin ( t ) ;
109
+
110
+ var xp = x / Math . cos ( y0 ) ;
111
+
112
+ // Resulting point.
113
+ return { 'lat' : y + y0 , 'lon' : xp + x0 } ;
114
+ }
0 commit comments