wip
This commit is contained in:
		
							parent
							
								
									ebe416aecc
								
							
						
					
					
						commit
						0f36bbd3d4
					
				
					 2 changed files with 104 additions and 95 deletions
				
			
		| 
						 | 
					@ -1,95 +0,0 @@
 | 
				
			||||||
<mk-access-log-home-widget>
 | 
					 | 
				
			||||||
	<template v-if="data.design == 0">
 | 
					 | 
				
			||||||
		<p class="title">%fa:server%%i18n:desktop.tags.mk-access-log-home-widget.title%</p>
 | 
					 | 
				
			||||||
	</template>
 | 
					 | 
				
			||||||
	<div ref="log">
 | 
					 | 
				
			||||||
		<p each={ requests }>
 | 
					 | 
				
			||||||
			<span class="ip" style="color:{ fg }; background:{ bg }">{ ip }</span>
 | 
					 | 
				
			||||||
			<span>{ method }</span>
 | 
					 | 
				
			||||||
			<span>{ path }</span>
 | 
					 | 
				
			||||||
		</p>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
	<style lang="stylus" scoped>
 | 
					 | 
				
			||||||
		:scope
 | 
					 | 
				
			||||||
			display block
 | 
					 | 
				
			||||||
			overflow hidden
 | 
					 | 
				
			||||||
			background #fff
 | 
					 | 
				
			||||||
			border solid 1px rgba(0, 0, 0, 0.075)
 | 
					 | 
				
			||||||
			border-radius 6px
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			> .title
 | 
					 | 
				
			||||||
				z-index 1
 | 
					 | 
				
			||||||
				margin 0
 | 
					 | 
				
			||||||
				padding 0 16px
 | 
					 | 
				
			||||||
				line-height 42px
 | 
					 | 
				
			||||||
				font-size 0.9em
 | 
					 | 
				
			||||||
				font-weight bold
 | 
					 | 
				
			||||||
				color #888
 | 
					 | 
				
			||||||
				box-shadow 0 1px rgba(0, 0, 0, 0.07)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				> [data-fa]
 | 
					 | 
				
			||||||
					margin-right 4px
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			> div
 | 
					 | 
				
			||||||
				max-height 250px
 | 
					 | 
				
			||||||
				overflow auto
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				> p
 | 
					 | 
				
			||||||
					margin 0
 | 
					 | 
				
			||||||
					padding 8px
 | 
					 | 
				
			||||||
					font-size 0.8em
 | 
					 | 
				
			||||||
					color #555
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					&:nth-child(odd)
 | 
					 | 
				
			||||||
						background rgba(0, 0, 0, 0.025)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
					> .ip
 | 
					 | 
				
			||||||
						margin-right 4px
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	</style>
 | 
					 | 
				
			||||||
	<script lang="typescript">
 | 
					 | 
				
			||||||
		import seedrandom from 'seedrandom';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.data = {
 | 
					 | 
				
			||||||
			design: 0
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.mixin('widget');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.mixin('requests-stream');
 | 
					 | 
				
			||||||
		this.connection = this.requestsStream.getConnection();
 | 
					 | 
				
			||||||
		this.connectionId = this.requestsStream.use();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.requests = [];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.on('mount', () => {
 | 
					 | 
				
			||||||
			this.connection.on('request', this.onRequest);
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.on('unmount', () => {
 | 
					 | 
				
			||||||
			this.connection.off('request', this.onRequest);
 | 
					 | 
				
			||||||
			this.requestsStream.dispose(this.connectionId);
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.onRequest = request => {
 | 
					 | 
				
			||||||
			const random = seedrandom(request.ip);
 | 
					 | 
				
			||||||
			const r = Math.floor(random() * 255);
 | 
					 | 
				
			||||||
			const g = Math.floor(random() * 255);
 | 
					 | 
				
			||||||
			const b = Math.floor(random() * 255);
 | 
					 | 
				
			||||||
			const luma = (0.2126 * r) + (0.7152 * g) + (0.0722 * b); // SMPTE C, Rec. 709 weightings
 | 
					 | 
				
			||||||
			request.bg = `rgb(${r}, ${g}, ${b})`;
 | 
					 | 
				
			||||||
			request.fg = luma >= 165 ? '#000' : '#fff';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			this.requests.push(request);
 | 
					 | 
				
			||||||
			if (this.requests.length > 30) this.requests.shift();
 | 
					 | 
				
			||||||
			this.update();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			this.$refs.log.scrollTop = this.$refs.log.scrollHeight;
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		this.func = () => {
 | 
					 | 
				
			||||||
			if (++this.data.design == 2) this.data.design = 0;
 | 
					 | 
				
			||||||
			this.save();
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	</script>
 | 
					 | 
				
			||||||
</mk-access-log-home-widget>
 | 
					 | 
				
			||||||
							
								
								
									
										104
									
								
								src/web/app/desktop/views/components/widgets/access-log.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								src/web/app/desktop/views/components/widgets/access-log.vue
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,104 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					<div class="mkw-access-log">
 | 
				
			||||||
 | 
						<template v-if="props.design == 0">
 | 
				
			||||||
 | 
							<p class="title">%fa:server%%i18n:desktop.tags.mk-access-log-home-widget.title%</p>
 | 
				
			||||||
 | 
						</template>
 | 
				
			||||||
 | 
						<div ref="log">
 | 
				
			||||||
 | 
							<p v-for="req in requests">
 | 
				
			||||||
 | 
								<span class="ip" :style="`color:${ req.fg }; background:${ req.bg }`">{{ req.ip }}</span>
 | 
				
			||||||
 | 
								<span>{{ req.method }}</span>
 | 
				
			||||||
 | 
								<span>{{ req.path }}</span>
 | 
				
			||||||
 | 
							</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
					import define from '../../../../common/define-widget';
 | 
				
			||||||
 | 
					import seedrandom from 'seedrandom';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default define({
 | 
				
			||||||
 | 
						name: 'broadcast',
 | 
				
			||||||
 | 
						props: () => ({
 | 
				
			||||||
 | 
							design: 0
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}).extend({
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								requests: [],
 | 
				
			||||||
 | 
								connection: null,
 | 
				
			||||||
 | 
								connectionId: null
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						mounted() {
 | 
				
			||||||
 | 
							this.connection = (this as any).os.streams.requestsStream.getConnection();
 | 
				
			||||||
 | 
							this.connectionId = (this as any).os.streams.requestsStream.use();
 | 
				
			||||||
 | 
							this.connection.on('request', this.onRequest);
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						beforeDestroy() {
 | 
				
			||||||
 | 
							this.connection.off('request', this.onRequest);
 | 
				
			||||||
 | 
							(this as any).os.streams.requestsStream.dispose(this.connectionId);
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							onRequest(request) {
 | 
				
			||||||
 | 
								const random = seedrandom(request.ip);
 | 
				
			||||||
 | 
								const r = Math.floor(random() * 255);
 | 
				
			||||||
 | 
								const g = Math.floor(random() * 255);
 | 
				
			||||||
 | 
								const b = Math.floor(random() * 255);
 | 
				
			||||||
 | 
								const luma = (0.2126 * r) + (0.7152 * g) + (0.0722 * b); // SMPTE C, Rec. 709 weightings
 | 
				
			||||||
 | 
								request.bg = `rgb(${r}, ${g}, ${b})`;
 | 
				
			||||||
 | 
								request.fg = luma >= 165 ? '#000' : '#fff';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.requests.push(request);
 | 
				
			||||||
 | 
								if (this.requests.length > 30) this.requests.shift();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								(this.$refs.log as any).scrollTop = (this.$refs.log as any).scrollHeight;
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							func() {
 | 
				
			||||||
 | 
								if (this.props.design == 1) {
 | 
				
			||||||
 | 
									this.props.design = 0;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									this.props.design++;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="stylus" scoped>
 | 
				
			||||||
 | 
					.mkw-access-log
 | 
				
			||||||
 | 
						overflow hidden
 | 
				
			||||||
 | 
						background #fff
 | 
				
			||||||
 | 
						border solid 1px rgba(0, 0, 0, 0.075)
 | 
				
			||||||
 | 
						border-radius 6px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						> .title
 | 
				
			||||||
 | 
							z-index 1
 | 
				
			||||||
 | 
							margin 0
 | 
				
			||||||
 | 
							padding 0 16px
 | 
				
			||||||
 | 
							line-height 42px
 | 
				
			||||||
 | 
							font-size 0.9em
 | 
				
			||||||
 | 
							font-weight bold
 | 
				
			||||||
 | 
							color #888
 | 
				
			||||||
 | 
							box-shadow 0 1px rgba(0, 0, 0, 0.07)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							> [data-fa]
 | 
				
			||||||
 | 
								margin-right 4px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						> div
 | 
				
			||||||
 | 
							max-height 250px
 | 
				
			||||||
 | 
							overflow auto
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							> p
 | 
				
			||||||
 | 
								margin 0
 | 
				
			||||||
 | 
								padding 8px
 | 
				
			||||||
 | 
								font-size 0.8em
 | 
				
			||||||
 | 
								color #555
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								&:nth-child(odd)
 | 
				
			||||||
 | 
									background rgba(0, 0, 0, 0.025)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								> .ip
 | 
				
			||||||
 | 
									margin-right 4px
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue