Woeii.
This commit is contained in:
		
							parent
							
								
									71a032e3ef
								
							
						
					
					
						commit
						c1e0f353f8
					
				| @ -22,6 +22,6 @@ where = src | |||||||
| 
 | 
 | ||||||
| [options.entry_points] | [options.entry_points] | ||||||
| console_scripts = | console_scripts = | ||||||
|     metrici.serve = metriki.__main__:main |     metriki.serve = metriki.__main__:main | ||||||
|     metrici.stats = metriki.stats:main |     metriki.stats = metriki.stats:main | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,23 +1,10 @@ | |||||||
| import asyncio | import asyncio | ||||||
| 
 | import aiohttp | ||||||
| from boeh import BooeehBot, env | from aiohttp import web | ||||||
| 
 | from metriki.app import Application | ||||||
| 
 |  | ||||||
| async def main_async(): |  | ||||||
|     url = "https://matrix.org" |  | ||||||
|     username = "@retoor2:matrix.org" |  | ||||||
|     password = env.secret4 |  | ||||||
|     bot = BooeehBot(url, username, password) |  | ||||||
| 
 |  | ||||||
|     try: |  | ||||||
|         await bot.start() |  | ||||||
|     except KeyboardInterrupt: |  | ||||||
|         await bot.stop() |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| def main(): | def main(): | ||||||
|     asyncio.run(main_async()) |     web.run_app(Application(db_path="sqlite:///metriki.db"),host="0.0.0.0",port=4000) | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     main() |     main() | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ import aiohttp | |||||||
| import json | import json | ||||||
| import uuid  | import uuid  | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
|  | import pathlib | ||||||
| 
 | 
 | ||||||
| class BaseView(web.View): | class BaseView(web.View): | ||||||
|      |      | ||||||
| @ -130,17 +131,22 @@ class EventView(BaseView): | |||||||
| 
 | 
 | ||||||
| class Application(BaseApplication): | class Application(BaseApplication): | ||||||
| 
 | 
 | ||||||
|     async def __init__(self, db_path, *args, **kwargs): |     def __init__(self, db_path, *args, **kwargs): | ||||||
|         self.view_count = 0 |         self.view_count = 0 | ||||||
|         self.event_count = 0 |         self.event_count = 0 | ||||||
|         await super().__init__(db_path=db_path, *args, **kwargs) |         super().__init__(db_path=db_path, *args, **kwargs) | ||||||
|         self.router.add_get("/", self.index_handler) |         self.router.add_get("/", self.index_handler) | ||||||
|         self.router.add_view("/event", EventView) |         self.router.add_view("/event", EventView) | ||||||
|  |         self.router.add_static("/static", pathlib.Path(__file__).parent.joinpath("static")) | ||||||
| 
 | 
 | ||||||
|     async def index_handler(self, request): |     async def index_handler(self, request): | ||||||
|         return web.Response( |         return web.Response( | ||||||
|             text="\n".join(["Under the spreading chestnut tree" |             text="\n".join([ | ||||||
|             "I sold you, and you sold me" |                 "\n".join([ | ||||||
|             "There lie they, and here lie we," |                     "Under the spreading chestnut tree", | ||||||
|  |                     "I sold you, and you sold me", | ||||||
|  |                     "There lie they, and here lie we,", | ||||||
|                     "Under the spreading chestnut tree." |                     "Under the spreading chestnut tree." | ||||||
|         ]),content_type='text/plain') |                 ]), | ||||||
|  |             ]) | ||||||
|  |         ,content_type='text/plain') | ||||||
|  | |||||||
							
								
								
									
										92
									
								
								src/metriki/static/metriki.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/metriki/static/metriki.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,92 @@ | |||||||
|  | 
 | ||||||
|  | class Metriki { | ||||||
|  |      | ||||||
|  |     url = null | ||||||
|  |     _isConnected = false  | ||||||
|  |     _isRendered = false  | ||||||
|  | 
 | ||||||
|  |     set isRendered() { | ||||||
|  |          | ||||||
|  |         this._isRendered = true  | ||||||
|  |         this.mount() | ||||||
|  |     } | ||||||
|  |     set isConnected() { | ||||||
|  |         this._isConnected = true | ||||||
|  |         this.mount() | ||||||
|  |     } | ||||||
|  |     get isRendered() { | ||||||
|  |         return this._isRendered | ||||||
|  |     } | ||||||
|  |     get isConnected() { | ||||||
|  |         return this._isConnected | ||||||
|  |     } | ||||||
|  |     mount() { | ||||||
|  |         if(this.isRendered && this.isConnected) { | ||||||
|  |             this.ws.send("render") | ||||||
|  |         }    | ||||||
|  |     } | ||||||
|  |     emit(data){ | ||||||
|  |         this.ws.send(JSON.stringify(data)) | ||||||
|  |     } | ||||||
|  |     emitVisit(){ | ||||||
|  |         this.emit({"href":window.location.href,"html":document.documentElement.outerHTML,"title":document.title,"domain":window.location.host}) | ||||||
|  |         this.addEventListeners() | ||||||
|  |     } | ||||||
|  |     addEventListeners(){ | ||||||
|  |         const me = this  | ||||||
|  |         document.addEventListener('mousemove', (e) => { | ||||||
|  |             me.emit({ | ||||||
|  |                 "event":"mousemove", | ||||||
|  |                 "page_x":e.pageX, | ||||||
|  |                 "page_y":e.pageY, | ||||||
|  |                 "screen_x":e.screenX, | ||||||
|  |                 "screen_y":e.screenY, | ||||||
|  |                 "client_x":e.clientX, | ||||||
|  |                 "client_y":e.clientY, | ||||||
|  |                 "target_x":e.target.offsetLeft, | ||||||
|  |                 "target_y":e.target.offsetTop | ||||||
|  |             }) | ||||||
|  |         }) | ||||||
|  |         document.addEventListener('scroll', (e) => { | ||||||
|  |             me.emit({ | ||||||
|  |                 "event":"scroll", | ||||||
|  |                 "scroll_height":document.documentElement.scrollHeight, | ||||||
|  |                 "scroll_left":document.documentElement.scrollLeft, | ||||||
|  |                 "scroll_top":document.documentElement.scrollTop, | ||||||
|  |                 "client_width":document.documentElement.clientWidth, | ||||||
|  |                 "client_height":document.documentElement.clientHeight | ||||||
|  |             }) | ||||||
|  |         }) | ||||||
|  |         document.addEventListener('click', (e) => { | ||||||
|  |             me.emit({ | ||||||
|  |                 "event":"click", | ||||||
|  |                 "target":e.target.id || e.target.className || e.target.tagName | ||||||
|  |             }) | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     constructor() { | ||||||
|  |         this.url = window.location.href.replace("http://", "").replace("https://", "").replace("www.", "") | ||||||
|  |         if this.url.endswith("/"): | ||||||
|  |             this.url += "event" | ||||||
|  |         esle | ||||||
|  |             this.url += "/event" | ||||||
|  | 
 | ||||||
|  |         console.log(this.url)    | ||||||
|  |         const me = this  | ||||||
|  |         this.ws = new WebSocket(this.url) | ||||||
|  |         this.ws.onopen = () => { | ||||||
|  |             me.isConnected = true | ||||||
|  |         } | ||||||
|  |         this.ws.onmessage = (e) => { | ||||||
|  |             console.log(e.data) | ||||||
|  |         } | ||||||
|  |         document.addEventListener('DOMContentLoaded', () => { | ||||||
|  |             me.isRendered = true | ||||||
|  |         }) | ||||||
|  |              | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const metriki = new Metriki() | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user