/* Licensed to the public under the Apache License 2.0. */

'use strict';

return L.Class.extend({
	title: _('Netlink'),

	rrdargs: function(graph, host, plugin, plugin_instance, dtype) {
		/*
		 * traffic diagram
		 */
		var traffic = {
			title: "%H: Netlink - Transfer on %pi",
			vlabel: "Bytes/s",

			/* diagram data description */
			data: {
				/* defined sources for data types, if omitted assume a single DS named "value" (optional) */
				sources: {
					if_octets: [ "tx", "rx" ]
				},

				/* special options for single data lines */
				options: {
					if_octets__tx: {
						title: "Bytes (TX)",
						total: true,		/* report total amount of bytes */
						color: "00ff00"	/* tx is green */
					},

					if_octets__rx: {
						title: "Bytes (RX)",
						flip : true,		/* flip rx line */
						total: true,		/* report total amount of bytes */
						color: "0000ff"	/* rx is blue */
					}
				}
			}
		};

		/*
		 * packet diagram
		 */
		var packets = {
			title: "%H: Netlink - Packets on %pi",
			vlabel: "Packets/s", detail: true,

			/* diagram data description */
			data: {
				/* data type order */
				types: [ "if_packets", "if_dropped", "if_errors" ],

				/* defined sources for data types */
				sources: {
					if_packets: [ "tx", "rx" ],
					if_dropped: [ "tx", "rx" ],
					if_errors : [ "tx", "rx" ]
				},

				/* special options for single data lines */
				options: {
					/* processed packets (tx DS) */
					if_packets__tx: {
						weight : 2,
						title  : "Total   (TX)",
						overlay: true,		/* don't summarize */
						total  : true,		/* report total amount of bytes */
						color  : "00ff00"	/* processed tx is green */
					},

					/* processed packets (rx DS) */
					if_packets__rx: {
						weight : 3,
						title  : "Total   (RX)",
						overlay: true,		/* don't summarize */
						flip   : true,		/* flip rx line */
						total  : true,		/* report total amount of bytes */
						color  : "0000ff"	/* processed rx is blue */
					},

					/* dropped packets (tx DS) */
					if_dropped__tx: {
						weight : 1,
						title  : "Dropped (TX)",
						overlay: true,		/* don't summarize */
						total  : true,		/* report total amount of bytes */
						color  : "660055"	/* dropped tx is ... dunno ;) */
					},

					/* dropped packets (rx DS) */
					if_dropped__rx: {
						weight : 4,
						title  : "Dropped (RX)",
						overlay: true,		/* don't summarize */
						flip   : true,		/* flip rx line */
						total  : true,		/* report total amount of bytes */
						color  : "ff00ff"	/* dropped rx is violett */
					},

					/* packet errors (tx DS) */
					if_errors__tx: {
						weight : 0,
						title  : "Errors  (TX)",
						overlay: true,		/* don't summarize */
						total  : true,		/* report total amount of packets */
						color  : "ff5500"	/* tx errors are orange */
					},

					/* packet errors (rx DS) */
					if_errors__rx: {
						weight : 5,
						title  : "Errors  (RX)",
						overlay: true,		/* don't summarize */
						flip   : true,		/* flip rx line */
						total  : true,		/* report total amount of packets */
						color  : "ff0000"	/* rx errors are red */
					}
				}
			}
		};

		/*
		 * multicast diagram
		 */
		var multicast = {
			title: "%H: Netlink - Multicast on %pi",
			vlabel: "Packets/s", detail: true,

			/* diagram data description */
			data: {
				/* data type order */
				types: [ "if_multicast" ],

				/* special options for single data lines */
				options: {
					/* multicast packets */
					if_multicast: {
						title: "Packets",
						total: true,		/* report total amount of packets */
						color: "0000ff"	/* multicast is blue */
					}
				}
			}
		};

		/*
		 * collision diagram
		 */
		var collisions = {
			title: "%H: Netlink - Collisions on %pi",
			vlabel: "Collisions/s", detail: true,

			/* diagram data description */
			data: {
				/* data type order */
				types: [ "if_collisions" ],

				/* special options for single data lines */
				options: {
					/* collision rate */
					if_collisions: {
						title: "Collisions",
						total: true,		/* report total amount of packets */
						color: "ff0000"	/* collsions are red */
					}
				}
			}
		};

		/*
		 * error diagram
		 */
		var errors = {
			title: "%H: Netlink - Errors on %pi",
			vlabel: "Errors/s", detail: true,

			/* diagram data description */
			data: {
				/* data type order */
				types: [ "if_tx_errors", "if_rx_errors" ],

				/* data type instances */
				instances: {
					if_tx_errors: [ "aborted", "carrier", "fifo", "heartbeat", "window" ],
					if_rx_errors: [ "length", "missed", "over", "crc", "fifo", "frame" ]
				},

				/* special options for single data lines */
				options: {
					if_tx_errors_aborted_value  : { total: true, color: "ffff00", title: "Aborted   (TX)" },
					if_tx_errors_carrier_value  : { total: true, color: "ffcc00", title: "Carrier   (TX)" },
					if_tx_errors_fifo_value     : { total: true, color: "ff9900", title: "Fifo      (TX)" },
					if_tx_errors_heartbeat_value: { total: true, color: "ff6600", title: "Heartbeat (TX)" },
					if_tx_errors_window_value   : { total: true, color: "ff3300", title: "Window    (TX)" },

					if_rx_errors_length_value   : { flip: true, total: true, color: "ff0000", title: "Length    (RX)" },
					if_rx_errors_missed_value   : { flip: true, total: true, color: "ff0033", title: "Missed    (RX)" },
					if_rx_errors_over_value     : { flip: true, total: true, color: "ff0066", title: "Over      (RX)" },
					if_rx_errors_crc_value      : { flip: true, total: true, color: "ff0099", title: "CRC       (RX)" },
					if_rx_errors_fifo_value     : { flip: true, total: true, color: "ff00cc", title: "Fifo      (RX)" },
					if_rx_errors_frame_value    : { flip: true, total: true, color: "ff00ff", title: "Frame     (RX)" }
				}
			}
		};

		return [ traffic, packets, multicast, collisions, errors ];
	}
});