UNPKG

neoss

Version:

<div align="center"> <h1>neoss</h1> <i>Socket statistics, with a UI.</i> </div> <p align="center"> <a href="https://img.shields.io/github/v/release/pablolec/neoss" target="_blank"> <img src="https://img.shields.io/github/v/release/pablolec/neo

136 lines (119 loc) 3.55 kB
let lastSort: number; let lastScroll: any; let ascending = false; /** * Try to retrieve previously selected line after table refresh. * * @param socket - Socket object to be retrieved * @param data - Refreshed table data to be parsed * @param currentIndex - Current selected line number, returned if no match * @returns Line number to be highlighted */ export function retrieveSocket(socket: any, data: string, currentIndex: number): number { if (socket == null) { return currentIndex; } let i = 0; while (i < data.length) { let l: any = data[i]; let s: any = socket; let isSameInode = s.inode != "0" && s.inode == l.inode let isSameOtherParams = s.localAddress == l.localAddress && s.localPort == l.localPort && s.peerAddress == l.peerAddress && s.peerPort == l.peerPort if (isSameInode || isSameOtherParams) { currentIndex = i; break; } i++; } return currentIndex; } function sortColumn(data: string[], key: string, numeric = false) { if (ascending && numeric) { data.sort((a: string, b: string) => (parseInt(a[key]) > parseInt(b[key]) ? 1 : -1)); } else if (!ascending && numeric) { data.sort((a: string, b: string) => (parseInt(a[key]) < parseInt(b[key]) ? 1 : -1)); } else if (key == "users" && ascending) { data.sort((a: string, b: string) => (a[key].text > b[key].text ? 1 : -1)); } else if (key == "users") { data.sort((a: string, b: string) => (a[key].text < b[key].text ? 1 : -1)); } else if (ascending) { data.sort((a: string, b: string) => (a[key] > b[key] ? 1 : -1)); } else { data.sort((a: string, b: string) => (a[key] < b[key] ? 1 : -1)); } } /** * Handle socket sort. * * @param column Currently selected column * @param data Table data * @returns Sorted data */ export function sortBy(column: number | null, data: string[]): string[] { if (column == null && lastSort == null) { return data; } else if (column == null) { column = lastSort; } else if (lastSort == column) { ascending = !ascending; } lastSort = column; switch (column) { case 0: sortColumn(data, "protocol"); break; case 1: sortColumn(data, "state"); break; case 2: sortColumn(data, "receiveQueue", true); break; case 3: sortColumn(data, "sendQueue", true); break; case 4: sortColumn(data, "localAddress"); break; case 5: sortColumn(data, "localPort", true); break; case 6: sortColumn(data, "peerAddress"); break; case 7: sortColumn(data, "peerPort", true); break; case 8: sortColumn(data, "users"); break; } return data; } /** * Get lines index range to be displayed after scroll. * * @param row - Currently selected line index * @param screenLines - Complete array of table lines * @returns - Lines index range to be displayed */ export function getScroll(row: number, screenLines: number): number[] { if (lastScroll === undefined) { lastScroll = [0, screenLines - 1]; } let newScroll = lastScroll; let diff: number; if (row >= lastScroll[0] && row < lastScroll[1]) { newScroll = lastScroll; } else if (row < lastScroll[0]) { diff = lastScroll[0] - row; newScroll = [lastScroll[0] - diff, lastScroll[1] - diff]; } else if (row >= lastScroll[1]) { diff = row - lastScroll[1] + 1; newScroll = [lastScroll[0] + diff, lastScroll[1] + diff]; } lastScroll = newScroll; return newScroll; }