opennms
Version:
Client API for the OpenNMS network monitoring platform
125 lines (112 loc) • 3.52 kB
text/typescript
import {OnmsError} from '../api/OnmsError';
import {log} from '../api/Log';
import {Address4, Address6} from 'ip-address';
import {Moment} from 'moment';
/** @hidden */
// eslint-disable-next-line
const moment = require('moment');
/** @hidden */
const dateFormat = 'YYYY-MM-DDTHH:mm:ss.SSSZZ';
/**
* A utility class for random stuff.
* @category Internal
*/
export class Util {
/**
* Convert an IP address string to an [[Address4]] or [[Address6]] object.
*/
public static toIPAddress(addr?: string) {
if (addr) {
try {
if (addr.indexOf(':') >= 0) {
return new Address6(addr);
} else {
return new Address4(addr);
}
} catch (err) {
log.error('Unable to parse IP address "' + addr + '"', err);
}
}
return undefined;
}
/**
* Whether or not the passed object is already a date. (Either a [[Moment]] object, or
* a JavaScript [[Date]] object.)
*/
public static isDateObject(date: any) {
return moment.isMoment(date) || date instanceof Date;
}
/**
* Create a [[Moment]] from any form of date (JavaScript [[Date]], [[Moment]], or epoch).
* [[Moment]] dates in OpenNMS.js will always be converted internally to UTC to avoid time
* zone issues.
*/
public static toMoment(date: Date|Moment|string|number): Moment | undefined {
if (date === undefined || date === null) {
return undefined;
} else if (moment.isMoment(date)) {
return (date as Moment).utc();
} else if (typeof(date) === 'number' || date instanceof Date
|| typeof(date) === 'string' || date instanceof String) {
return moment(date).utc();
} else {
throw new OnmsError('Unable to parse type "' + typeof(date) + '" as a date.');
}
}
/**
* Create a date string from any form of date (JavaScript [[Date]], [[Moment]], or epoch).
* Dates in OpenNMS.js will always be converted internally to UTC before stringifying to
* avoid time zone issues.
*/
public static toDateString(date: Date|Moment|number) {
const ret = Util.toMoment(date);
if (ret) {
return ret.utc().format(dateFormat);
} else {
return undefined;
}
}
/**
* Retrieve the matching key (regardless of case) in the given search object.
* @param key the key to search for
* @param search the object to search
*/
public static insensitiveKey(key: string, search: { [key: string]: any }) {
if (!key || !search) {
return;
}
for (const k in search) {
if (k && k.toLowerCase() === key.toLowerCase()) {
return k;
}
}
}
/**
* Retrieve the value for the matching key (regardless of case) in the given search.
* @param key the key to search for
* @param search the object to search
*/
public static insensitiveValue(key: string, search: { [key: string]: any }) {
if (!key || !search) {
return;
}
const k = Util.insensitiveKey(key, search);
return k ? search[k] : undefined;
}
/**
* Convert the given value to a date, or undefined if it cannot be converted.
*/
public static toDate(from: any): Moment|undefined {
if (from === undefined || from === null || from === '') {
return undefined;
}
return moment(from);
}
/**
* Convert the given value to a number, or undefined if it cannot be converted.
*/
public static toNumber(from: any): number|undefined {
const ret = parseInt(from, 10);
return isNaN(ret) ? undefined : ret;
}
}