list({
		onlyLocal = false,
		onlyAvailable = false,
		skipInternal = false,
		withActions = false,
		withEvents = false,
		grouping = false
	}) {
		let res = [];
		this.services.forEach(service => {
			if (skipInternal && /^\$/.test(service.name)) return;

			if (onlyLocal && !service.local) return;

			if (onlyAvailable && !service.node.available) return;

			let item;
			if (grouping) item = res.find(svc => svc.fullName == service.fullName);

			if (!item) {
				let item = {
					name: service.name,
					version: service.version,
					fullName: service.fullName,
					settings: service.settings,
					metadata: service.metadata,

					local: service.local,
					available: service.node.available
				};

				if (grouping) item.nodes = [service.node.id];
				else item.nodeID = service.node.id;

				if (withActions) {
					item.actions = {};

					_.forIn(service.actions, action => {
						if (action.protected) return;

						item.actions[action.name] = _.omit(action, [
							"handler",
							"remoteHandler",
							"service"
						]);
					});
				}

				if (withEvents) {
					item.events = {};

					_.forIn(service.events, event => {
						// Skip internal event handlers
						if (/^\$/.test(event.name)) return;

						item.events[event.name] = _.omit(event, [
							"handler",
							"remoteHandler",
							"service"
						]);
					});
				}

				res.push(item);
			} else {
				if (item.nodes.indexOf(service.node.id) === -1) item.nodes.push(service.node.id);
			}
		});

		return res;
	}
Get a filtered list of services with actions

@param {Object} {onlyLocal = false,  onlyAvailable = false, skipInternal = false, withActions = false, withEvents = false, grouping = false}
@returns {Array}

@memberof Registry