Skip to main content

GARR

GARR Scholarships

19 November 2019 | GARR
Orio Carlini Scholarships

"Orio Carlini" Scholarships

Ogni anno GARR mette a disposizione delle borse di studio, intitolate al prof. Orio Carlini, destinate a 10 giovani talenti che si occupano di tematiche legate alle infrastrutture digitali e al loro uso in ambito multidisciplinare.

Queste borse di studio sono volte alla realizzazione di un progetto di ricerca della durata di 12 mesi su argomenti individuati dallo studente.
I progetti possono essere svolti presso enti ed istituzioni scientifiche, culturali ed accademiche collegate alla rete GARR oppure presso la sede di Roma del Consortium GARR.

Available Scholarships

Find out more

GARR Technological Scholarships

GARR Technological Scholarships

Il GARR Innovators Programme nasce con l’obiettivo di offrire a studenti magistrali e giovani ricercatori nel settore ICT l’opportunità di fare un’esperienza di studio e ricerca direttamente presso le nostre sedi, approfondendo temi definiti da GARR nell’ambito della rete e della trasmissione dati, del cloud e delle infrastrutture di calcolo e dati.

Le proposte sono registrate e valutate in base all’ordine cronologico di presentazione e le borse tecnologiche sono assegnate fino ad esaurimento dei fondi disponibili.

Available Scholarships

Find out more

Annual Report - Application services

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

List of graphics for application services

  • Mirror: annual traffic volume
  • Filesender: sent files
  • Speedtest: measurements made
Choose Mirror: annual traffic volume Filesender: sent files Speedtest: measurements made

Mirror: annual traffic volume

The graph shows the total volume of data transferred from the Mirror to the outside.

Save image

Filesender: sent files

The graph shows the number of files sent in a year using the Filesender service.

Save image

Speedtest: measurements made

GARR Speedtest measures the capacity, latency and jitter of a network connection.
The graph shows the number of measurements made and the number of unique IP addresses they came from.

Save image

Keep reading

 Network and access  Staff


The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports

var numeroScheda=""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const {x, y} = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const {ctx, chartArea : {top, right, bottom, left, width, height} } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height /2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height /2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichettePie = { id: 'mostraEtichettePie', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const assoluto = chart.data.datasets[i].data[index]; const postAssoluto = assoluto.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const percentuale = valorePercentuale + '%'; const assolutoWidth = ctx.measureText(postAssoluto).width; const percentualeWidth = ctx.measureText(percentuale).width; if (assolutoWidth >= percentualeWidth) { var maggiore = assolutoWidth; } else {var maggiore = percentualeWidth;} const {x, y} = datapoint.tooltipPosition(); const textWidth = maggiore; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 42, textWidth + 10, 37); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(postAssoluto, x - (textWidth / 2), y - 28); ctx.fillText(percentuale, x - (textWidth / 2), y - 11); ctx.restore(); } }) }) } }; const mostraEtichette = { id: 'mostraEtichette', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 25, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 14); ctx.restore(); }) }) } }; const mostraEtichetteStacked = { id: 'mostraEtichetteStacked', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(",", ".").replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 5, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y+20); ctx.lineTo(x - 5, y + 15); ctx.lineTo(x + 5, y + 15); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y+6); ctx.restore(); }) }) } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y-19); ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const {ctx, chartArea: { top, bottom, left, right} } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } /* const WebMeetingsOreData = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020'], datasets: [{ label: 'Ore di presenza in aula virtuale', data: [2464, 3296, 4966, 34381], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore }] }; const optionsWMO = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'WebMeetings: hours of presence in the virtual classroom', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Hours', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = WebMeetingsOreGraficoHD; var a = document.getElementById('WebMeetingsOre_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'webmeetings-ore-di-presenza-GARR-en.png'; } } } const WebMeetingsOreConfig = { type: 'bar', data: WebMeetingsOreData, options: optionsWMO, plugins: [mostraEtichetteStacked, sfondoBianco, LogoGARR] }; const WebMeetingsOreGrafico = new Chart( document.getElementById('WebMeetingsOre'), WebMeetingsOreConfig ); const WebMeetingsOreGraficoHD = new Chart( document.getElementById('WebMeetingsOreHD'), WebMeetingsOreConfig ); */ const optionsMTA = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Mirror: annual traffic volume', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Petabyte: 1PB = 1.000.000 GB', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = MirrorTrafficoAnnualeGraficoHD; var a = document.getElementById('MirrorTrafficoAnnuale_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'mirror-traffico-annuale-GARR-en.png'; } } } const MirrorTrafficoAnnualeData = { tricodemo: 1, labels: ['2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Petabyte', data: [8.1, 7.4, 6.9, 6.8, 6.0, 5.8, 6.0, 4.5, 5.7], pointBackgroundColor: ArrayColoreBordo[4], backgroundColor: ArrayColoreSfondo[4], borderColor: ArrayColore[4], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const MirrorTrafficoAnnualeConfig = { type: 'line', data: MirrorTrafficoAnnualeData, options: optionsMTA, plugins: [mostraEtichetteSopra, sfondoBianco, LogoGARR] }; const MirrorTrafficoAnnualeGrafico = new Chart( document.getElementById('MirrorTrafficoAnnuale'), MirrorTrafficoAnnualeConfig ); const MirrorTrafficoAnnualeGraficoHD = new Chart( document.getElementById('MirrorTrafficoAnnualeHD'), MirrorTrafficoAnnualeConfig ); const optionsFLS = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Filesender: sent files', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Sent files', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = FilesenderGraficoHD; var a = document.getElementById('Filesender_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'filesender-file-inviati-GARR-en.png'; } } } const FilesenderData = { labels: ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Sent files', data: [35000, 59000, 88000, 90407, 100583, 73605, 132904, 138000], pointBackgroundColor: ArrayColoreBordo[5], backgroundColor: ArrayColoreSfondo[5], borderColor: ArrayColore[5], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const FilesenderConfig = { type: 'line', data: FilesenderData, options: optionsFLS, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const FilesenderGrafico = new Chart( document.getElementById('Filesender'), FilesenderConfig ); const FilesenderGraficoHD = new Chart( document.getElementById('FilesenderHD'), FilesenderConfig ); const optionsSPT = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Speedtest: measurements made', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Measurements made', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = SpeedTestGraficoHD; var a = document.getElementById('SpeedTest_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'misure-effettuate-speedtest-GARR-en.png'; } } } const SpeedTestData = { labels: ['2019', '2020', '2021'], datasets: [{ label: 'Measurements', data: [3650, 28950, 33500], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore },{ label: 'Unique IPs', data: [830, 11522, 20000], backgroundColor: ArrayColore[1], borderColor: ArrayColoreBordo[1], borderWidth: BordoSpessore }] }; const SpeedTestConfig = { type: 'bar', data: SpeedTestData, options: optionsSPT, plugins: [sfondoBianco, mostraEtichette, LogoGARR] }; const SpeedTestGrafico = new Chart( document.getElementById('SpeedTest'), SpeedTestConfig ); const SpeedTestGraficoHD = new Chart( document.getElementById('SpeedTestHD'), SpeedTestConfig ); $(function(){ $('#selectGrafico').on('change', function () { var url = $(this).val(); if (url) { window.location = url; } return false; }); });

Annual Report - Communication

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

List of graphics for GARR communication

  • Social media: followers
  • GARR TV: available videos
  • GARR News: page views
Choose Social media: followers GARR TV: available videos GARR News: page views

Social media: followers

The graph shows the trend of followers on the various GARR social channels.

Save image

GARR TV: available videos

The graph shows the trend of available videos on the GARR TV platfor.

Save image

GARR News: page views

The graph shows the trend in the number of page views of the online edition of GARR NEWS magazine.

Save image

Keep reading

 Staff  GARR Network


The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports

var numeroScheda = ""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const { x, y } = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const { ctx, chartArea: { top, right, bottom, left, width, height } } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height / 2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height / 2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const { ctx } = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const { x, y } = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) / 2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 19); ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const { ctx, chartArea: { top, bottom, left, right } } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } /* const optionsCVP = { maintainAspectRatio: false, layout: { padding: { right: SpazioDestra } }, plugins: { title: { text: 'Post impressions', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: true }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Impressions', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function () { var CanvasTemp = VisualizzazioniPostGraficoHD; var a = document.getElementById('VisualizzazioniPost_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'visualizzazione-post-GARR-en.png'; } } } const VisualizzazioniPostData = { labels: ['2015', '2016', '2017', '2018', '2019', '2020'], datasets: [{ label: 'Facebook', data: [99678, 231815, 212083, 274594, 333018, 209988], backgroundColor: ArrayColoreBordo[0], borderColor: ArrayColore[0], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Youtube', data: [2965, 6377, 16923, 22357, 22406, 50870], backgroundColor: ArrayColoreBordo[2], borderColor: ArrayColore[2], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Twitter', data: [54535, 161891, 206487, 336600, 366573, 248366], backgroundColor: ArrayColoreBordo[3], borderColor: ArrayColore[3], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }] }; const VisualizzazioniPostConfig = { type: 'line', data: VisualizzazioniPostData, options: optionsCVP, plugins: [sfondoBianco, LogoGARR] }; const VisualizzazioniPostGrafico = new Chart( document.getElementById('VisualizzazioniPost'), VisualizzazioniPostConfig ); const VisualizzazioniPostGraficoHD = new Chart( document.getElementById('VisualizzazioniPostHD'), VisualizzazioniPostConfig ); */ const optionsCVF = { maintainAspectRatio: false, layout: { padding: { right: SpazioDestra } }, plugins: { title: { text: 'Social media: Followers', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: true }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Followers', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function () { var CanvasTemp = FollowersGraficoHD; var a = document.getElementById('Followers_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'followers-GARR-en.png'; } } } const FollowersData = { labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Facebook', data: [1697, 2082, 2562, 3149, 3530], backgroundColor: ArrayColoreBordo[0], borderColor: ArrayColore[0], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Twitter', data: [1114, 1405, 1559, 1763, 1942], backgroundColor: ArrayColoreBordo[3], borderColor: ArrayColore[3], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Youtube', data: [280, 477, 734, 1440, 2180], backgroundColor: ArrayColoreBordo[2], borderColor: ArrayColore[2], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Linkedin', data: [0, 867, 1174, 1579, 2079], backgroundColor: ArrayColoreBordo[1], borderColor: ArrayColore[1], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }, { label: 'Instagram', data: [0, 0, 505, 582, 679], backgroundColor: ArrayColoreBordo[6], borderColor: ArrayColore[6], borderWidth: 1, borderDash: [4, 4], tension: 0.5 }] }; const FollowersConfig = { type: 'line', data: FollowersData, options: optionsCVF, plugins: [sfondoBianco, LogoGARR] }; const FollowersGrafico = new Chart( document.getElementById('Followers'), FollowersConfig ); const FollowersGraficoHD = new Chart( document.getElementById('FollowersHD'), FollowersConfig ); const optionsCGT = { maintainAspectRatio: false, layout: { padding: { right: SpazioDestra } }, plugins: { title: { text: 'GARR TV: available videos', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Videos', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function () { var CanvasTemp = GARRTvGraficoHD; var a = document.getElementById('GARRTv_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'filmati-disponibili-GARRTv-GARR-en.png'; } } } const GARRTvData = { labels: ['2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Available videos', data: [553, 770, 890, 1102, 1271, 1465, 1644, 2161, 2362], pointBackgroundColor: ArrayColoreBordo[0], backgroundColor: ArrayColoreSfondo[0], borderColor: ArrayColore[0], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const GARRTvConfig = { type: 'line', data: GARRTvData, options: optionsCGT, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const GARRTvGrafico = new Chart( document.getElementById('GARRTv'), GARRTvConfig ); const GARRTvGraficoHD = new Chart( document.getElementById('GARRTvHD'), GARRTvConfig ); const optionsCGN = { maintainAspectRatio: false, layout: { padding: { right: SpazioDestra } }, plugins: { title: { text: 'GARR News: page views', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Pages', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function () { var CanvasTemp = GARRNewsGraficoHD; var a = document.getElementById('GARRNews_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'lettori-GARR-News-GARR-en.png'; } } } const GARRNewsData = { labels: ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Page views', data: [7877, 10751, 10600, 12955, 13037, 13635, 20374, 28281], pointBackgroundColor: ArrayColoreBordo[5], backgroundColor: ArrayColoreSfondo[5], borderColor: ArrayColore[5], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const GARRNewsConfig = { type: 'line', data: GARRNewsData, options: optionsCGN, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const GARRNewsGrafico = new Chart( document.getElementById('GARRNews'), GARRNewsConfig ); const GARRNewsGraficoHD = new Chart( document.getElementById('GARRNewsHD'), GARRNewsConfig ); /* const optionsCVS = { maintainAspectRatio: false, layout: { padding: { right: SpazioDestra } }, plugins: { title: { text: 'GARR websites: page views', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: false, title: { text: 'Page views', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function () { var CanvasTemp = VisualizzazioniSitiGraficoHD; var a = document.getElementById('VisualizzazioniSiti_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'visualizzazioni-pagine-GARR-en.png'; } } } const VisualizzazioniSitiData = { labels: ['2016', '2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Page views', data: [479000, 541000, 521000, 538328, 743197, 624000], pointBackgroundColor: ArrayColoreBordo[4], backgroundColor: ArrayColoreSfondo[4], borderColor: ArrayColore[4], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const VisualizzazioniSitiConfig = { type: 'line', data: VisualizzazioniSitiData, options: optionsCVS, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const VisualizzazioniSitiGrafico = new Chart( document.getElementById('VisualizzazioniSiti'), VisualizzazioniSitiConfig ); const VisualizzazioniSitiGraficoHD = new Chart( document.getElementById('VisualizzazioniSitiHD'), VisualizzazioniSitiConfig ); */ $(function () { $('#selectGrafico').on('change', function () { var url = $(this).val(); if (url) { window.location = url; } return false; }); });

Annual Report - GARR staff

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

List of graphs for GARR Staff

  • Staff gender
  • Age
  • Type of activity
  • Mission related activity
  • Type of contract
  • Annual salary
Choose Staff gender Age Type of activity Mission related activity Type of contract Annual salary

Staff gender

The graph shows the composition of GARR staff by gender.

Select the year: 2021 2020 2019 2018 2017
Save image

Staff age

The graph shows the composition of GARR staff by age.

Select the year: 2021 2020 2019 2018 2017 2016
Save image

Type of activity

The graph shows the breakdown of personnel by activity performed. Technical activities are related to the institutional mission. Administrative activities are carried out in the areas of administration, secretariat, training, communication, web and multimedia. R&D is structured as a cross-cutting activity, tapping into the personnel of all GARR departments and services.

Select the year: 2021 2020 2019 2018
Save image

Mission related activity

The chart shows the detail of technical activities carried out by GARR staff.

Select the year: 2021 2020 2019 2018
Save image

Contract type

The chart shows the breakdown of personnel by contract type.

Select the year: 2021 2020 2019 2018
Save image

Staff: gross annual salary

The graph shows the distribution of gross annual salary of employees.

Select the year: 2021 2020 2019 2018 2017
Save image

Keep reading

 Application services  Communication


The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports

var numeroScheda=""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const {x, y} = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const {ctx, chartArea : {top, right, bottom, left, width, height} } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height /2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height /2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichettePie = { id: 'mostraEtichettePie', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const assoluto = chart.data.datasets[i].data[index]; const postAssoluto = assoluto.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const percentuale = valorePercentuale + '%'; const assolutoWidth = ctx.measureText(postAssoluto).width; const percentualeWidth = ctx.measureText(percentuale).width; if (assolutoWidth >= percentualeWidth) { var maggiore = assolutoWidth; } else {var maggiore = percentualeWidth;} const {x, y} = datapoint.tooltipPosition(); const textWidth = maggiore; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 42, textWidth + 10, 37); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(postAssoluto, x - (textWidth / 2), y - 28); ctx.fillText(percentuale, x - (textWidth / 2), y - 11); ctx.restore(); } }) }) } }; const mostraEtichette = { id: 'mostraEtichette', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 25, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 14); ctx.restore(); }) }) } }; const mostraEtichetteStacked = { id: 'mostraEtichetteStacked', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 5, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y+20); ctx.lineTo(x - 5, y + 15); ctx.lineTo(x + 5, y + 15); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y+6); ctx.restore(); }) }) } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y-19); ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const {ctx, chartArea: { top, bottom, left, right} } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } const PersonaleGenereData = { labels: ['Men', 'Women'], datasets: [{ label: '2021', data: [53, 25], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const optionsPGG = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Staff gender', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } } } const PersonaleGenereConfig = { type: 'doughnut', data: PersonaleGenereData, options: optionsPGG, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleGenereGrafico = new Chart( document.getElementById('PersonaleGenere'), PersonaleGenereConfig ); const optionsPGGHD = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Staff gender', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGG'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleGenereGraficoHD; var a = document.getElementById('PersonaleGenere_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'genere-personale-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleGenereConfigHD = { type: 'doughnut', data: PersonaleGenereData, options: optionsPGGHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleGenereGraficoHD = new Chart( document.getElementById('PersonaleGenereHD'), PersonaleGenereConfigHD ); const PersonaleEtaData = { labels: ['< 25', '25-30', '31-35', '36-40', '41-45', '46-50', '> 50'], datasets: [{ label: 'GARR Staff age', data: [2, 11, 3, 9, 18, 19, 16], backgroundColor: ArrayColore[5], borderColor: ArrayColoreBordo[5], borderWidth: BordoSpessore }] }; const optionsPGE = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Staff age', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Age', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Workers', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGE'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleEtaGraficoHD; var a = document.getElementById('PersonaleEta_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'eta-personale-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleEtaConfig = { type: 'bar', data: PersonaleEtaData, options: optionsPGE, plugins: [mostraEtichette, sfondoBianco, LogoGARR] }; const PersonaleEtaGrafico = new Chart( document.getElementById('PersonaleEta'), PersonaleEtaConfig ); const PersonaleEtaGraficoHD = new Chart( document.getElementById('PersonaleEtaHD'), PersonaleEtaConfig ); const PersonaleSettoreData = { labels: ['Technicians', 'Administration'], datasets: [{ label: '2021', data: [54, 24], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const optionsPGS = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Staff: Type of activity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } } } const PersonaleSettoreConfig = { type: 'doughnut', data: PersonaleSettoreData, options: optionsPGS, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleSettoreGrafico = new Chart( document.getElementById('PersonaleSettore'), PersonaleSettoreConfig ); const optionsPGSHD = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Staff: Type of activity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGS'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleSettoreGraficoHD; var a = document.getElementById('PersonaleSettore_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'settore-personale-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleSettoreConfigHD = { type: 'doughnut', data: PersonaleSettoreData, options: optionsPGSHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleSettoreGraficoHD = new Chart( document.getElementById('PersonaleSettoreHD'), PersonaleSettoreConfigHD ); const PersonaleTecnicoData = { labels: ['Management and planning', 'Informative system', 'Cloud'], datasets: [{ label: '2021', data: [36, 9, 9], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const optionsPGT = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR technical staff', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } } } const PersonaleTecnicoConfig = { type: 'doughnut', data: PersonaleTecnicoData, options: optionsPGT, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleTecnicoGrafico = new Chart( document.getElementById('PersonaleTecnico'), PersonaleTecnicoConfig ); const optionsPGTHD = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR technical staff', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGT'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleTecnicoGraficoHD; var a = document.getElementById('PersonaleTecnico_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'personale-tecnico-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleTecnicoConfigHD = { type: 'doughnut', data: PersonaleTecnicoData, options: optionsPGTHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleTecnicoGraficoHD = new Chart( document.getElementById('PersonaleTecnicoHD'), PersonaleTecnicoConfigHD ); const PersonaleContrattoData = { labels: ['Indefinite period', 'Part time permanent contract', 'Fixed term', 'Personnel of member organizations at GARR', 'Collaborators'], datasets: [{ label: '2021', data: [60, 5, 13, 7, 5], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const optionsPGC = { maintainAspectRatio: false, rotation: 55, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Staff: Contract type', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } } } const PersonaleContrattoConfig = { type: 'doughnut', data: PersonaleContrattoData, options: optionsPGC, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleContrattoGrafico = new Chart( document.getElementById('PersonaleContratto'), PersonaleContrattoConfig ); const optionsPGCHD = { maintainAspectRatio: false, rotation: 55, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'GARR Staff: Contract type', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'workers', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGC'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleContrattoGraficoHD; var a = document.getElementById('PersonaleContratto_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'contratto-personale-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleContrattoConfigHD = { type: 'doughnut', data: PersonaleContrattoData, options: optionsPGCHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const PersonaleContrattoGraficoHD = new Chart( document.getElementById('PersonaleContrattoHD'), PersonaleContrattoConfigHD ); const PersonaleRetribuzioneData = { labels: ['< 30', '30-35', '35-40', '40-45', '> 45'], datasets: [{ label: 'Workers', data: [15, 15, 10, 9, 29], backgroundColor: ArrayColore[4], borderColor: ArrayColoreBordo[4], borderWidth: BordoSpessore }] }; const optionsPGR = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Staff: gross annual salary', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Salary (thousands of euros)', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Workers', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectPGR'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = PersonaleRetribuzioneGraficoHD; var a = document.getElementById('PersonaleRetribuzione_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'retribuzione-personale-GARR-'+annoSelezionato+'-en.png'; } } } const PersonaleRetribuzioneConfig = { type: 'bar', data: PersonaleRetribuzioneData, options: optionsPGR, plugins: [mostraEtichette, sfondoBianco, LogoGARR] }; const PersonaleRetribuzioneGrafico = new Chart( document.getElementById('PersonaleRetribuzione'), PersonaleRetribuzioneConfig ); const PersonaleRetribuzioneGraficoHD = new Chart( document.getElementById('PersonaleRetribuzioneHD'), PersonaleRetribuzioneConfig ); const periodoPGG = document.getElementById('selectPGG'); periodoPGG.addEventListener('change', SelezionaPeriodoPGG) function SelezionaPeriodoPGG() { var lnk = document.getElementById('PersonaleGenere_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGG.value.split(','); PersonaleGenereGrafico.data.datasets[0].data = periodoPGG.value.split(','); PersonaleGenereGrafico.options.plugins.title.text = 'GARR: Staff gender in the ' + periodoPGG.options[periodoPGG.selectedIndex].text; PersonaleGenereGrafico.options.plugins.legend.position = posizioneLegenda; PersonaleGenereGrafico.update(); PersonaleGenereGraficoHD.data.datasets[0].data = periodoPGG.value.split(','); PersonaleGenereGraficoHD.options.plugins.title.text = 'GARR: Staff gender in the ' + periodoPGG.options[periodoPGG.selectedIndex].text; PersonaleGenereGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoPGE = document.getElementById('selectPGE'); periodoPGE.addEventListener('change', SelezionaPeriodoPGE) function SelezionaPeriodoPGE() { var lnk = document.getElementById('PersonaleEta_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGE.value.split(','); PersonaleEtaGrafico.data.datasets[0].data = periodoPGE.value.split(','); PersonaleEtaGrafico.options.plugins.title.text = 'Staff age GARR in the ' + periodoPGE.options[periodoPGE.selectedIndex].text; PersonaleEtaGrafico.update(); PersonaleEtaGraficoHD.data.datasets[0].data = periodoPGE.value.split(','); PersonaleEtaGraficoHD.options.plugins.title.text = 'Staff age GARR in the ' + periodoPGE.options[periodoPGE.selectedIndex].text; PersonaleEtaGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoPGS = document.getElementById('selectPGS'); periodoPGS.addEventListener('change', SelezionaPeriodoPGS) function SelezionaPeriodoPGS() { var lnk = document.getElementById('PersonaleSettore_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGS.value.split(','); PersonaleSettoreGrafico.data.datasets[0].data = periodoPGS.value.split(','); PersonaleSettoreGrafico.options.plugins.title.text = 'GARR Staff: Type of activity in the ' + periodoPGS.options[periodoPGS.selectedIndex].text; PersonaleSettoreGrafico.options.plugins.legend.position = posizioneLegenda; PersonaleSettoreGrafico.update(); PersonaleSettoreGraficoHD.data.datasets[0].data = periodoPGS.value.split(','); PersonaleSettoreGraficoHD.options.plugins.title.text = 'GARR Staff: Type of activity in the ' + periodoPGS.options[periodoPGS.selectedIndex].text; PersonaleSettoreGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoPGT = document.getElementById('selectPGT'); periodoPGT.addEventListener('change', SelezionaPeriodoPGT) function SelezionaPeriodoPGT() { var lnk = document.getElementById('PersonaleTecnico_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGT.value.split(','); PersonaleTecnicoGrafico.data.datasets[0].data = periodoPGT.value.split(','); PersonaleTecnicoGrafico.options.plugins.title.text = 'GARR Staff: Type of activity in the ' + periodoPGT.options[periodoPGT.selectedIndex].text; PersonaleTecnicoGrafico.options.plugins.legend.position = posizioneLegenda; PersonaleTecnicoGrafico.update(); PersonaleTecnicoGraficoHD.data.datasets[0].data = periodoPGT.value.split(','); PersonaleTecnicoGraficoHD.options.plugins.title.text = 'GARR Staff: Type of activity in the nel ' + periodoPGT.options[periodoPGT.selectedIndex].text; PersonaleTecnicoGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoPGC = document.getElementById('selectPGC'); periodoPGC.addEventListener('change', SelezionaPeriodoPGC) function SelezionaPeriodoPGC() { var lnk = document.getElementById('PersonaleContratto_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGC.value.split(','); PersonaleContrattoGrafico.data.datasets[0].data = periodoPGC.value.split(','); PersonaleContrattoGrafico.options.plugins.title.text = 'GARR Staff: Contract type in the ' + periodoPGC.options[periodoPGC.selectedIndex].text; PersonaleContrattoGrafico.options.plugins.legend.position = posizioneLegenda; PersonaleContrattoGrafico.update(); PersonaleContrattoGraficoHD.data.datasets[0].data = periodoPGC.value.split(','); PersonaleContrattoGraficoHD.options.plugins.title.text = 'GARR Staff: Contract type in the ' + periodoPGC.options[periodoPGC.selectedIndex].text; PersonaleContrattoGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoPGR = document.getElementById('selectPGR'); periodoPGR.addEventListener('change', SelezionaPeriodoPGR) function SelezionaPeriodoPGR() { var lnk = document.getElementById('PersonaleRetribuzione_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoPGR.value.split(','); PersonaleRetribuzioneGrafico.data.datasets[0].data = periodoPGR.value.split(','); PersonaleRetribuzioneGrafico.options.plugins.title.text = 'Staff: gross annual salary in the ' + periodoPGR.options[periodoPGR.selectedIndex].text; PersonaleRetribuzioneGrafico.update(); PersonaleRetribuzioneGraficoHD.data.datasets[0].data = periodoPGR.value.split(','); PersonaleRetribuzioneGraficoHD.options.plugins.title.text = 'Staff: gross annual salary in the' + periodoPGR.options[periodoPGR.selectedIndex].text; PersonaleRetribuzioneGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } $(function(){ $('#selectGrafico').on('change', function () { var url = $(this).val(); if (url) { window.location = url; } return false; }); });

Annual Report - Network and access services

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

List of graphs for network and access services

  • NOC: faults and maintenance
  • SCARR: vulnerability scans
  • CERT: security tickets handled
  • NIC & LIR: Registered domains and new networks allocated
  • IDEM: Joining to Federation
  • eduroam: Wi-Fi access in roaming via eduroam
  • eduroam: connected devices in roaming in Italy
  • CS: Released digital certificates
Choose NOC: faults and maintenance SCARR: vulnerability scans CERT: security tickets handled NIC & LIR: Registered domains and new networks allocated IDEM: Joining to Federation eduroam: Wi-Fi access in roaming via eduroam eduroam: connected devices in roaming in Italy CS: Released digital certificates

NOC: faults and maintenance

The graph shows the number of tickets (faults and scheduled maintenance) managed by the NOC (Network Operations Centre).

Change period
Save image

SCARR: vulnerability scans

The graph shows the number of vulnerability scans performed with the SCARR service.

Save image

CERT: security tickets handled

The graph shows the security tickets handled by GARR CERT.
GARR CERT assists users in managing network security incidents and in implementing measures aimed at their prevention.

Save image

NIC & LIR: Registered domains and new networks allocated

The graph shows the number of interventions made on .it and .eu domain names and the number of IPv4 and IPv6 networks assigned to entities in the GARR network.

Change period
Save image

IDEM: Joining to Federation

The graph shows the number of organisations that joined the IDEM federation. Institutions connected to the GARR network can join the IDEM federation as members. Third parties and other organizations can join as partners, to provide own services to the federation members. The graph shows also the trend of registration of Identity Provider and Service Provider.

Change period
Save image

eduroam: Wi-Fi access in roaming via eduroam

The graph shows the number of successful authentications from Italian users roaming on the national and foreign territory.

Save image

eduroam: connected devices in roaming in Italy

The graph shows the percentage of devices connected while roaming in Italy.

Select the year: 2021 2020 2019 2018 2017
Save image

CS: Released digital certificates

GARR Certification Service issues free personal and server digital certificates to the Research & Education community.
The graph shows the trend in the number of digital certificates issued.

Save image

Keep reading

 Cloud  Application services


The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports

var numeroScheda=""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TooltipLightColore = 'rgba(0,0,0,1)'; var TooltipLightSfondo = 'rgba(0,0,0,0)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const {x, y} = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const {ctx, chartArea : {top, right, bottom, left, width, height} } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height /2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height /2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichettePie = { id: 'mostraEtichettePie', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const assoluto = chart.data.datasets[i].data[index]; const postAssoluto = assoluto.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const percentuale = valorePercentuale + '%'; const assolutoWidth = ctx.measureText(postAssoluto).width; const percentualeWidth = ctx.measureText(percentuale).width; if (assolutoWidth >= percentualeWidth) { var maggiore = assolutoWidth; } else {var maggiore = percentualeWidth;} const {x, y} = datapoint.tooltipPosition(); const textWidth = maggiore; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 42, textWidth + 10, 37); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(postAssoluto, x - (textWidth / 2), y - 28); ctx.fillText(percentuale, x - (textWidth / 2), y - 11); ctx.restore(); } }) }) } }; const mostraEtichette = { id: 'mostraEtichette', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 25, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 14); ctx.restore(); }) }) } }; const mostraEtichetteStacked = { id: 'mostraEtichetteStacked', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 5, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y+20); ctx.lineTo(x - 5, y + 15); ctx.lineTo(x + 5, y + 15); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y+6); ctx.restore(); }) }) } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y-19); ctx.restore(); } }) }) } }; const sommaDueColonne = { id: 'sommaDueColonne', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); function isOdd(i) { return i % 2;} if (isOdd(i)) { var zero = i-1; var uno = i; var primo = chart.data.datasets[zero].data[index]; var secondo = chart.data.datasets[uno].data[index]; var pes= primo+secondo; const nCoppia = 'tot ' + pes.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const nCoppiaWidth = ctx.measureText(nCoppia).width; if ((chart.isDatasetVisible(zero)) && (chart.isDatasetVisible(uno))) { ctx.fillStyle = TooltipLightSfondo; ctx.fillRect(x - ((nCoppiaWidth + 10) /2), y - 30, nCoppiaWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(nCoppia, x - (nCoppiaWidth / 2), y-19); ctx.restore(); } } }) }) } }; const sommaTreColonne = { id: 'sommaTreColonne', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); function isEven(n) { return n % 2 == 0;} if (isEven(i) && i > 0) { if (chart.isDatasetVisible(i-2) == true){ var colonnaZero = parseInt(chart.data.datasets[i-2].data[index]); } else { var colonnaZero = 0; } if (chart.isDatasetVisible(i-1) == true){ var colonnaUno = parseInt(chart.data.datasets[i-1].data[index]); } else { var colonnaUno = 0; } if (chart.isDatasetVisible(i) == true){ var colonnaDue = parseInt(chart.data.datasets[i].data[index]); } else { var colonnaDue = 0; }; var ab = colonnaZero + colonnaUno; var ac = colonnaZero + colonnaDue; var bc = colonnaUno + colonnaDue; var abc = colonnaZero + colonnaUno + colonnaDue; var doppiettaAB = 'tot ' + ab.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var doppiettaAC = 'tot ' + ac.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var doppiettaBC = 'tot ' + bc.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var tripletta = 'tot ' + abc.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const triplettaWidth = ctx.measureText(tripletta).width; const doppiettaABWidth = ctx.measureText(doppiettaAB).width; const doppiettaACWidth = ctx.measureText(doppiettaAC).width; const doppiettaBCWidth = ctx.measureText(doppiettaBC).width; if ((chart.isDatasetVisible(0) === true) && (chart.isDatasetVisible(1) === true) && (chart.isDatasetVisible(2) === false)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaAB, x - (doppiettaABWidth / 2), (y-19 + datapoint.height)); } else if ((chart.isDatasetVisible(0) === false) && (chart.isDatasetVisible(1) === true) && (chart.isDatasetVisible(2) === true)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaBC, x - (doppiettaBCWidth / 2), y-19); } else if ((chart.isDatasetVisible(0) === true) && (chart.isDatasetVisible(1) === false) && (chart.isDatasetVisible(2) === true)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaAC, x - (doppiettaACWidth / 2), y-19); } else if (chart.isDatasetVisible(0) && chart.isDatasetVisible(1) && chart.isDatasetVisible(2)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(tripletta, x - (triplettaWidth / 2), y-19); } else { //console.log("una sola colonna è visibile"); }; ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const {ctx, chartArea: { top, bottom, left, right} } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } const optionsNGM = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'NOC: faults and maintenance', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, }, y: { beginAtZero: true, title: { text: 'Interventions carried out', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, } }, animation: { onComplete: function() { if (!(numeroScheda)) {numeroScheda="-2"}; var CanvasTemp = NOCGuastiManutenzioniGraficoHD; var a = document.getElementById('NOCGuastiManutenzioni_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'interventi-noc-GARR'+numeroScheda+'-en.png'; } } } const NOCGuastiManutenzioniDataUno = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Faults', data: [820, 956, 1062, 1027, 999], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: 'Maintenance', data: [393, 310, 390, 363, 432], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore }] }; const NOCGuastiManutenzioniDataDue = { tricodemo: 2, labels: ['2011', '2012', '2013', '2014', '2015', '2016'], datasets: [{ label: 'Faults', data: [658, 687, 734, 770, 754, 906], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: 'Maintenance', data: [309, 386, 432, 346, 416, 593], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore }] }; const NOCGuastiManutenzioniConfig = { type: 'bar', data: NOCGuastiManutenzioniDataUno, options: optionsNGM, plugins: [sfondoBianco, ChartDataLabels, sommaDueColonne, LogoGARR] }; const NOCGuastiManutenzioniGrafico = new Chart( document.getElementById('NOCGuastiManutenzioni'), NOCGuastiManutenzioniConfig ); const NOCGuastiManutenzioniGraficoHD = new Chart( document.getElementById('NOCGuastiManutenzioniHD'), NOCGuastiManutenzioniConfig ); const optionsSDV = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'SCARR: Vulnerability scans', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, }, y: { beginAtZero: true, title: { text: 'Scans', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, } }, animation: { onComplete: function() { var CanvasTemp = ScansioniDiVulnerabilitaGraficoHD; var a = document.getElementById('ScansioniDiVulnerabilita_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'scansioni-vulnerabilita-en.png'; } } } const ScansioniDiVulnerabilitaData = { labels: ['2019', '2020', '2021'], datasets: [{ label: 'Vulnerability scans', data: [450, 760, 2400], pointBackgroundColor: ArrayColoreBordo[1], backgroundColor: ArrayColore[1], borderColor: ArrayColore[1], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const ScansioniDiVulnerabilitaConfig = { type: 'bar', data: ScansioniDiVulnerabilitaData, options: optionsSDV, plugins: [sfondoBianco, ChartDataLabels, LogoGARR] }; const ScansioniDiVulnerabilitaGrafico = new Chart( document.getElementById('ScansioniDiVulnerabilita'), ScansioniDiVulnerabilitaConfig ); const ScansioniDiVulnerabilitaGraficoHD = new Chart( document.getElementById('ScansioniDiVulnerabilitaHD'), ScansioniDiVulnerabilitaConfig ); const optionsSSG = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'CERT: security tickets handled', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, }, y: { beginAtZero: true, title: { text: 'Security tickets', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, } }, animation: { onComplete: function() { var CanvasTemp = CERTSegnalazioniGestiteGraficoHD; var a = document.getElementById('CERTSegnalazioniGestite_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'segnalazioni-gestite-CERT-GARR-en.png'; } } } const CERTSegnalazioniGestiteData = { labels: ['2018', '2019', '2020', '2021'], datasets: [{ label: 'Manual tickets', data: [3110, 3689, 2493, 2243], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: 'Automatic ticket', data: [16825, 12471, 7392, 7677], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore }] }; const CERTSegnalazioniGestiteConfig = { type: 'bar', data: CERTSegnalazioniGestiteData, options: optionsSSG, plugins: [sfondoBianco, ChartDataLabels, sommaDueColonne, LogoGARR] }; const CERTSegnalazioniGestiteGrafico = new Chart( document.getElementById('CERTSegnalazioniGestite'), CERTSegnalazioniGestiteConfig ); const CERTSegnalazioniGestiteGraficoHD = new Chart( document.getElementById('CERTSegnalazioniGestiteHD'), CERTSegnalazioniGestiteConfig ); /* const optionsTSG = { maintainAspectRatio: false, plugins: { title: { text: 'Type of safety reports handled', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'reports', } } } const TipoSegnalazioniGestiteData = { // 2020 labels: ['DoS', 'Web', 'Virus', 'Spam', 'Copyright', 'Aperti involontariamente', 'Altro'], datasets: [{ label: '2020', data: [347, 628, 675, 197, 931, 164, 433], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const TipoSegnalazioniGestiteConfig = { type: 'doughnut', data: TipoSegnalazioniGestiteData, options: optionsTSG, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const TipoSegnalazioniGestiteGrafico = new Chart( document.getElementById('TipoSegnalazioniGestite'), TipoSegnalazioniGestiteConfig ); const optionsTSGHD = { maintainAspectRatio: false, plugins: { title: { text: 'Type of safety reports handled', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'reports', } }, animation: { onComplete: function() { var CanvasTemp = TipoSegnalazioniGestiteGraficoHD; var a = document.getElementById('TipoSegnalazioniGestite_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'tipo-segnalazioni-gestite-GARR-en.png'; } } } const TipoSegnalazioniGestiteConfigHD = { type: 'doughnut', data: TipoSegnalazioniGestiteData, options: optionsTSGHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const TipoSegnalazioniGestiteGraficoHD = new Chart( document.getElementById('TipoSegnalazioniGestiteHD'), TipoSegnalazioniGestiteConfigHD ); */ const optionsDER = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Registered domains and new IPv4 and IPv6 networks', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: true }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: false }, y: { beginAtZero: true, title: { text: 'Activities', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: false } }, animation: { onComplete: function() { if (!(numeroScheda)) {numeroScheda="-2"}; var CanvasTemp = DominiERetiGraficoHD; var a = document.getElementById('DominiEReti_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'domini-registrati-e-nuove-reti-GARR'+numeroScheda+'-en.png'; } } } const DominiERetiDataUno = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: '.it', data: [129, 164, 117, 92, 122], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: '.eu', data: [109, 90, 119, 87, 110], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore },{ label: 'IPv4 and IPv6 Networks', data: [11, 14, 18 ,41, 27], backgroundColor: ArrayColore[2], borderColor: ArrayColoreBordo[2], borderWidth: BordoSpessore }] }; const DominiERetiDataDue = { tricodemo: 2, labels: ['2012', '2013', '2014', '2015', '2016'], datasets: [{ label: '.it', data: [109, 96, 98, 103, 136], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: '.eu', data: [85, 70, 81, 79, 118], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore },{ label: 'IPv4 and IPv6 Networks', data: [37, 21, 79, 225, 37], backgroundColor: ArrayColore[2], borderColor: ArrayColoreBordo[2], borderWidth: BordoSpessore }] }; const DominiERetiConfig = { type: 'bar', data: DominiERetiDataUno, options: optionsDER, plugins: [sfondoBianco, ChartDataLabels, LogoGARR] }; const DominiERetiGrafico = new Chart( document.getElementById('DominiEReti'), DominiERetiConfig ); const DominiERetiGraficoHD = new Chart( document.getElementById('DominiERetiHD'), DominiERetiConfig ); const optionsIAF = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Memberships in the IDEM Federation', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, }, y: { beginAtZero: true, title: { text: 'Memberships', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, } }, animation: { onComplete: function() { if (!(numeroScheda)) {numeroScheda="-2"}; var CanvasTemp = AdesioniIDEMGraficoHD; var a = document.getElementById('AdesioniIDEM_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'adesioni-IDEM-GARR'+numeroScheda+'-en.png'; } } } const AdesioniIDEMDataUno = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Members', data: [77, 94, 104, 113, 139], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore, stack: "MeP" },{ label: 'Partners', data: [29, 29, 29, 30, 34], backgroundColor: ArrayColore[1], borderColor: ArrayColoreBordo[1], borderWidth: BordoSpessore, stack: "MeP" },{ label: 'IDP', data: [79, 97, 106, 113, 126], backgroundColor: ArrayColore[2], borderColor: ArrayColoreBordo[2], borderWidth: BordoSpessore, stack: "IeS" },{ label: 'SP', data: [125, 120, 116, 115, 121], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore, stack: "IeS" }] }; const AdesioniIDEMDataDue = { tricodemo: 2, labels: ['2012', '2013', '2014', '2015', '2016'], datasets: [{ label: 'Members', data: [38, 44, 60, 70, 72], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore, stack: "MeP" },{ label: 'Partner', data: [18, 21, 24, 26, 27], backgroundColor: ArrayColore[1], borderColor: ArrayColoreBordo[1], borderWidth: BordoSpessore, stack: "MeP" },{ label: 'IDP', data: [46, 55, 67, 74, 76], backgroundColor: ArrayColore[2], borderColor: ArrayColoreBordo[2], borderWidth: BordoSpessore, stack: "IeS" },{ label: 'SP', data: [75, 86, 105, 114, 118], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore, stack: "IeS" }] }; const AdesioniIDEMConfig = { type: 'bar', data: AdesioniIDEMDataUno, options: optionsIAF, plugins: [sfondoBianco, ChartDataLabels, sommaDueColonne, LogoGARR] }; const AdesioniIDEMGrafico = new Chart( document.getElementById('AdesioniIDEM'), AdesioniIDEMConfig ); const AdesioniIDEMGraficoHD = new Chart( document.getElementById('AdesioniIDEMHD'), AdesioniIDEMConfig ); const optionsEAW = { maintainAspectRatio: false, layout: { padding: { right: 50 //SpazioDestra } }, plugins: { title: { text: 'eduroam: Wi-Fi access in roaming via eduroam', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Accesses', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { callback: function(NumeroLungo) { const ValoreIniziale = this.getLabelForValue(NumeroLungo); const SenzaSeparatore = ValoreIniziale.replaceAll('.',''); if ((SenzaSeparatore.length

Annual Report - GARR Cloud

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

List of graphs for Cloud GARR

  • Users of GARR federated Cloud
  • Users by community
  • Resource usage by community
Choose Users of GARR federated Cloud Users by community Resource usage by community

Users of GARR federated Cloud

The graph shows the trend in the number of users who used GARR cloud resources.

Save image

GARR cloud: users by community

The graph shows the distribution of entities using the GARR cloud.

Select the year: 2021 2020 2019 2018 2017
Save image

GARR cloud: resource usage by community (vCPU)

The graph shows who are the main users of the GARR cloud resources (vCPUs) within the community.

Select the year: 2021 2020 2019 2018 2017
Save image

Keep reading

 GARR Network  Network and access services


The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports

var numeroScheda=""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const {x, y} = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const {ctx, chartArea : {top, right, bottom, left, width, height} } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height /2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height /2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichettePie = { id: 'mostraEtichettePie', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const assoluto = chart.data.datasets[i].data[index]; const postAssoluto = assoluto.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const percentuale = valorePercentuale + '%'; const assolutoWidth = ctx.measureText(postAssoluto).width; const percentualeWidth = ctx.measureText(percentuale).width; if (assolutoWidth >= percentualeWidth) { var maggiore = assolutoWidth; } else {var maggiore = percentualeWidth;} const {x, y} = datapoint.tooltipPosition(); const textWidth = maggiore; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 42, textWidth + 10, 37); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(postAssoluto, x - (textWidth / 2), y - 28); ctx.fillText(percentuale, x - (textWidth / 2), y - 11); ctx.restore(); } }) }) } }; const mostraEtichette = { id: 'mostraEtichette', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 25, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 14); ctx.restore(); }) }) } }; const mostraEtichetteStacked = { id: 'mostraEtichetteStacked', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 5, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y+20); ctx.lineTo(x - 5, y + 15); ctx.lineTo(x + 5, y + 15); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y+6); ctx.restore(); }) }) } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y-19); ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const {ctx, chartArea: { top, bottom, left, right} } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } const UtentiCloudGARRData = { tricodemo: 1, //labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Capacity (Gbps)', //data: [959, 991, 1031, 1049, 1066, 1093, 1106, 1112, 1142, 1176, 1200, 1215], data: [373, 705, 944, 1215, 1402], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore }] }; const optionsUCG = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Users of GARR federated Cloud', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { callback: function(TestoLungo) { const NuovoTesto = this.getLabelForValue(TestoLungo); const TestoCorto = NuovoTesto.substr(0, 4); return TestoCorto; }, color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Users', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, } }, animation: { onComplete: function() { var CanvasTemp = UtentiCloudGARRGraficoHD; var a = document.getElementById('UtentiCloudGARR_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'utenti-della-cloud-GARR-en.png'; } } } const UtentiCloudGARRConfig = { type: 'bar', data: UtentiCloudGARRData, options: optionsUCG, plugins: [mostraEtichetteStacked, sfondoBianco, LogoGARR] }; const UtentiCloudGARRGrafico = new Chart( document.getElementById('UtentiCloudGARR'), UtentiCloudGARRConfig ); const UtentiCloudGARRGraficoHD = new Chart( document.getElementById('UtentiCloudGARRHD'), UtentiCloudGARRConfig ); const optionsCUC = { maintainAspectRatio: false, rotation: 96, plugins: { title: { text: 'GARR cloud: users by community', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'users', } } } const CloudUtentiComunitaData = { tricodemo: 1, labels: ['University', 'PA', 'Scientific Research', 'Research networks', 'Biomedical research', 'GARR Services', 'Other'], datasets: [{ label: 'Users by community', data: [170, 31, 261, 14, 113, 247, 42], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const CloudUtentiComunitaConfig = { type: 'doughnut', data: CloudUtentiComunitaData, options: optionsCUC, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CloudUtentiComunitaGrafico = new Chart( document.getElementById('CloudUtentiComunita'), CloudUtentiComunitaConfig ); const optionsCUCHD = { maintainAspectRatio: false, rotation: 96, plugins: { title: { text: 'GARR cloud: users by community', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'users', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectCUC'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = CloudUtentiComunitaGraficoHD; var a = document.getElementById('CloudUtentiComunita_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'utenti-cloud-per-comunita-GARR-'+annoSelezionato+'-en.png'; } } } const CloudUtentiComunitaConfigHD = { type: 'doughnut', data: CloudUtentiComunitaData, options: optionsCUCHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CloudUtentiComunitaGraficoHD = new Chart( document.getElementById('CloudUtentiComunitaHD'), CloudUtentiComunitaConfigHD ); const optionsCRC = { maintainAspectRatio: false, rotation: 190, plugins: { title: { text: 'GARR cloud: resource usage by community (vCPU)', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'resources', } } } const CloudRisorseComunitaData = { tricodemo: 1, labels: ['Scientific Research', 'PA', 'University', 'Research networks', 'GARR Services', 'Biomedical research', 'Other'], datasets: [{ label: 'Resource usage by community', data: [2513, 91, 1187, 41, 921, 771, 156], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const CloudRisorseComunitaConfig = { type: 'doughnut', data: CloudRisorseComunitaData, options: optionsCRC, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CloudRisorseComunitaGrafico = new Chart( document.getElementById('CloudRisorseComunita'), CloudRisorseComunitaConfig ); const optionsCRCHD = { maintainAspectRatio: false, rotation: 190, plugins: { title: { text: 'GARR cloud: resource usage by community (vCPU)', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'resources', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectCRC'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = CloudRisorseComunitaGraficoHD; var a = document.getElementById('CloudRisorseComunita_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'cloud-risorse-per-comunita-GARR-'+annoSelezionato+'-en.png'; } } } const CloudRisorseComunitaConfigHD = { type: 'doughnut', data: CloudRisorseComunitaData, options: optionsCRCHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CloudRisorseComunitaGraficoHD = new Chart( document.getElementById('CloudRisorseComunitaHD'), CloudRisorseComunitaConfigHD ); /* const periodoUCG = document.getElementById('selectUCG'); periodoUCG.addEventListener('change', SelezionaPeriodoUCG) function SelezionaPeriodoUCG() { var lnk = document.getElementById('UtentiCloudGARR_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoUCG.value.split(','); UtentiCloudGARRGrafico.data.datasets[0].data = periodoUCG.value.split(','); UtentiCloudGARRGrafico.options.plugins.title.text = 'Users of GARR federated Cloud in ' + periodoUCG.options[periodoUCG.selectedIndex].text; UtentiCloudGARRGrafico.update(); UtentiCloudGARRGraficoHD.data.datasets[0].data = periodoUCG.value.split(','); UtentiCloudGARRGraficoHD.options.plugins.title.text = 'Users of GARR federated Cloud in ' + periodoUCG.options[periodoUCG.selectedIndex].text; UtentiCloudGARRGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } */ const periodoCUC = document.getElementById('selectCUC'); periodoCUC.addEventListener('change', SelezionaPeriodoCUC) function SelezionaPeriodoCUC() { var lnk = document.getElementById('CloudUtentiComunita_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoCUC.value.split(','); CloudUtentiComunitaGrafico.data.datasets[0].data = periodoCUC.value.split(','); CloudUtentiComunitaGrafico.options.plugins.title.text = 'GARR cloud: users by community in ' + periodoCUC.options[periodoCUC.selectedIndex].text; CloudUtentiComunitaGrafico.options.plugins.legend.position = posizioneLegenda; CloudUtentiComunitaGrafico.update(); CloudUtentiComunitaGraficoHD.data.datasets[0].data = periodoCUC.value.split(','); CloudUtentiComunitaGraficoHD.options.plugins.title.text = 'GARR cloud: users by community in ' + periodoCUC.options[periodoCUC.selectedIndex].text; CloudUtentiComunitaGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoCRC = document.getElementById('selectCRC'); periodoCRC.addEventListener('change', SelezionaPeriodoCRC) function SelezionaPeriodoCRC() { var lnk = document.getElementById('CloudRisorseComunita_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoCRC.value.split(','); CloudRisorseComunitaGrafico.data.datasets[0].data = periodoCRC.value.split(','); CloudRisorseComunitaGrafico.options.plugins.title.text = 'GARR cloud: resource usage in ' + periodoCRC.options[periodoCRC.selectedIndex].text; CloudRisorseComunitaGrafico.options.plugins.legend.position = posizioneLegenda; CloudRisorseComunitaGrafico.update(); CloudRisorseComunitaGraficoHD.data.datasets[0].data = periodoCRC.value.split(','); CloudRisorseComunitaGraficoHD.options.plugins.title.text = 'GARR cloud: resource usage in ' + periodoCRC.options[periodoCRC.selectedIndex].text; CloudRisorseComunitaGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } $(function(){ $('#selectGrafico').on('change', function () { var url = $(this).val(); if (url) { window.location = url; } return false; }); });

Annual Report - GARR Network

28 September 2018 | GARR

.ContenitoreHD, .GraficoHD { width: 1200px; height: 600px; background: rgba(255, 255, 255, 1); } .ContenitorePieHD, .GraficoPieHD { width: 600px; height: 600px; background: rgba(255, 255, 255, 1); } .bottone { margin: 15px 25px 15px 5px; }

The information contained in this document is taken from the "2021 Final Budget" and from the Report on the activity carried out and results achieved 2021 approved by the GARR Shareholders' Meeting in May 2022.

pdf Download the 2021 annual report(22.72 MB)

All annual reports


List of graphs for GARR Network

  • Backbone links aggregated capacity
  • Access links aggregated capacity
  • Backbone links capacity
  • Backbone access links
  • Total traffic volume
  • Peering traffic volume
  • Traffic volume of the accesses and peerings
  • Peering traffic type
Choose Backbone links aggregated capacity Access links aggregated capacity Backbone links capacity Backbone access links Total traffic volume Peering traffic volume Traffic volume of the accesses and peerings Peering traffic type

Backbone links aggregated capacity

The graph shows the trend of the aggregated IP capacity of the GARR backbone.

Change period
Save image

Access links aggregated capacity

The graph shows the trend of aggregate access link capacity of the sites connected to GARR.

Change period
Save image

Backbone links capacity

The graph shows the composition of the network backbone links with a breakdown according to their capacity.

Select the year: 2021 2020 2019 2018 2017 2016
Save image

Backbone access links

The graph shows the composition of the access links of the sites connected to GARR with a breakdown based on their capacity.

Select the year: 2021 2020 2019 2018 2017 2016
Save image

Total traffic volume on the GARR network

The graph shows the trend of total traffic on the GARR network.

Save image

Traffic volume of the GARR network peering

The graph shows the trend on a monthly basis of the traffic volume generated by the peering of the GARR network. The items considered are upstream and direct peering traffic, traffic to and from Internet Exchanges and research peering traffic.

Select the year: 2021 2020 2019 2018 2017 2016 2015 2014 2013
Save image

Traffic volume of the accesses and peerings

The graph compares, on a monthly basis, the total user access traffic with the traffic of research peering.

Select the year: 2021 2020 2019 2018 2017 2016 2015 2014 2013
Save image

Peering traffic type

The graph shows the composition of the peering traffic on the GARR network.

Select the year: 2021 2020 2019 2018 2017
Save image

Keep reading

 Cloud

var numeroScheda=""; var SpazioDestra = 30; var TitoloFont = 'Raleway'; var TitoloFontSize = 15; var TitoloVisualizza = true; var TitoloAllinea = 'end'; // start center end var TitoloPadding = 20; var TitoloColore = '#1d5b37'; var TitoloStile = 'normal'; // normal italic oblique initial inherit var ArrayColore = ["rgba(0, 29, 111, 0.6)", "rgba(0, 111, 62, 0.6)", "rgba(197, 26, 26, 0.6)", "rgba(224, 155, 38, 0.6)", "rgba(111, 0, 86, 0.6)", "rgba(228, 88, 19, 0.6)", "rgba(71, 0, 11, 0.6)"]; var ArrayColoreBordo = ["rgba(0, 29, 111, 1)", "rgba(0, 111, 62, 1)", "rgba(111, 0, 0, 1)", "rgba(224, 155, 38, 1)", "rgba(111, 0, 86, 1)", "rgba(228, 88, 19, 1)", "rgba(71, 0, 11, 1)"]; var ArrayColoreSfondo = ["rgba(0, 29, 111, 0.1)", "rgba(0, 111, 62, 0.1)", "rgba(197, 26, 26, 0.1)", "rgba(224, 155, 38, 0.1)", "rgba(111, 0, 86, 0.1)", "rgba(228, 88, 19, 0.1)", "rgba(71, 0, 11, 0.1)"]; var Bianco = '#FFFFFF'; var Nero = '#000000'; var Grigio = '#a3a3a3'; var BordoSpessore = 1; var AssiFont = 'Varela Round'; var AssiFontSize = 13; var AssiVisualizza = 'true'; var AssiAllinea = 'center'; var AssiPadding = 10; var AssiColore = '#1d5b37'; var AssiStile = 'normal'; var LabelFont = 'Varela Round'; var LabelFontSize = 13; var LabelColore = '#1d5b37'; var LabelStile = 'normal'; var TooltipFont = 'Varela Round'; var TooltipFontSize = 13; var TooltipColore = 'rgba(255,255,255,1)'; var TooltipSfondo = 'rgba(0,0,0,1)'; var TooltipLightColore = 'rgba(0,0,0,1)'; var TooltipLightSfondo = 'rgba(0,0,0,0)'; var TicksFont = 'Varela Round'; var TicksFontSize = 13; var TicksColore = '#1d5b37'; var TicksStile = 'normal'; var sfondoImmagine = 'rgba(255,255,255,1)'; var legendaImmagine = 'right'; if (document.getElementById("contenuto-principale").offsetWidth { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const {x, y} = datapoint.tooltipPosition(); var cosaMisura = chart.config.options.plugins.Contatore.cosaMisura; let primoValore = chart.data.datasets[i].data.indexOf(chart.data.datasets[i].data[index]); if (primoValore == 0) { const {ctx, chartArea : {top, right, bottom, left, width, height} } = chart; ctx.save(); ctx.font = TitoloFont; ctx.textAlign = 'center'; ctx.fillStyle = Nero; ctx.fontSize = 30; ctx.fillText('Total of ' + cosaMisura + ':', left + (width / 2), top + (height /2) - 11); ctx.fillText(postSommaTotale, left + (width / 2), top + (height /2) + 11); ctx.restore(); } }) }) } }; const sfondoBianco = { id: 'sfondoBianco', beforeDraw: (chart) => { const ctx = chart.canvas.getContext('2d'); ctx.save(); ctx.globalCompositeOperation = 'destination-over'; ctx.fillStyle = sfondoImmagine; ctx.fillRect(0, 0, chart.width, chart.height); ctx.restore(); } }; const mostraEtichettePie = { id: 'mostraEtichettePie', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const datapoints = chart.data.datasets[i].data; function Totale(total, datapoint) { return Number(total) + Number(datapoint) } const sommaTotale = datapoints.reduce(Totale); const postSommaTotale = sommaTotale.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const valorePercentuale = (chart.data.datasets[i].data[index] / sommaTotale * 100).toFixed(1); const assoluto = chart.data.datasets[i].data[index]; const postAssoluto = assoluto.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const percentuale = valorePercentuale + '%'; const assolutoWidth = ctx.measureText(postAssoluto).width; const percentualeWidth = ctx.measureText(percentuale).width; if (assolutoWidth >= percentualeWidth) { var maggiore = assolutoWidth; } else {var maggiore = percentualeWidth;} const {x, y} = datapoint.tooltipPosition(); const textWidth = maggiore; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 42, textWidth + 10, 37); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(postAssoluto, x - (textWidth / 2), y - 28); ctx.fillText(percentuale, x - (textWidth / 2), y - 11); ctx.restore(); } }) }) } }; const mostraEtichette = { id: 'mostraEtichette', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 25, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y); ctx.lineTo(x - 5, y - 5); ctx.lineTo(x + 5, y - 5); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y - 14); ctx.restore(); }) }) } }; const mostraEtichetteStacked = { id: 'mostraEtichetteStacked', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 5, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y+20); ctx.lineTo(x - 5, y + 15); ctx.lineTo(x + 5, y + 15); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y+6); ctx.restore(); }) }) } }; const mostraEtichetteSopra = { id: 'mostraEtichetteSopra', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); // per il testo completo // const text = chart.data.labels[index] + ': ' + chart.data.datasets[i].data[index]; const preText = chart.data.datasets[i].data[index]; const text = preText.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const textWidth = ctx.measureText(text).width; if (!(chart.data.datasets[i].data[index] == 0) && (chart.getDataVisibility(index) == true)) { ctx.fillStyle = TooltipSfondo; ctx.fillRect(x - ((textWidth + 10) /2), y - 30, textWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipColore; ctx.fillText(text, x - (textWidth / 2), y-19); ctx.restore(); } }) }) } }; const sommaDueColonne = { id: 'sommaDueColonne', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); function isOdd(i) { return i % 2;} if (isOdd(i)) { var zero = i-1; var uno = i; var primo = chart.data.datasets[zero].data[index]; var secondo = chart.data.datasets[uno].data[index]; var pes= primo+secondo; const nCoppia = 'tot ' + pes.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const nCoppiaWidth = ctx.measureText(nCoppia).width; if ((chart.isDatasetVisible(zero)) && (chart.isDatasetVisible(uno))) { ctx.fillStyle = TooltipLightSfondo; ctx.fillRect(x - ((nCoppiaWidth + 10) /2), y - 30, nCoppiaWidth + 10, 20); ctx.beginPath(); ctx.moveTo(x, y - 5); ctx.lineTo(x - 5, y - 10); ctx.lineTo(x + 5, y - 10); ctx.fill(); ctx.restore(); ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(nCoppia, x - (nCoppiaWidth / 2), y-19); ctx.restore(); } } }) }) } }; const sommaTreColonne = { id: 'sommaTreColonne', afterDraw(chart, args, options) { const {ctx} = chart; ctx.save(); chart.data.datasets.forEach((dataset, i) => { chart.getDatasetMeta(i).data.forEach((datapoint, index) => { const {x, y} = datapoint.tooltipPosition(); function isEven(n) { return n % 2 == 0;} if (isEven(i) && i > 0) { if (chart.isDatasetVisible(i-2) == true){ var colonnaZero = parseInt(chart.data.datasets[i-2].data[index]); } else { var colonnaZero = 0; } if (chart.isDatasetVisible(i-1) == true){ var colonnaUno = parseInt(chart.data.datasets[i-1].data[index]); } else { var colonnaUno = 0; } if (chart.isDatasetVisible(i) == true){ var colonnaDue = parseInt(chart.data.datasets[i].data[index]); } else { var colonnaDue = 0; }; var ab = colonnaZero + colonnaUno; var ac = colonnaZero + colonnaDue; var bc = colonnaUno + colonnaDue; var abc = colonnaZero + colonnaUno + colonnaDue; var doppiettaAB = 'tot ' + ab.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var doppiettaAC = 'tot ' + ac.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var doppiettaBC = 'tot ' + bc.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); var tripletta = 'tot ' + abc.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); const triplettaWidth = ctx.measureText(tripletta).width; const doppiettaABWidth = ctx.measureText(doppiettaAB).width; const doppiettaACWidth = ctx.measureText(doppiettaAC).width; const doppiettaBCWidth = ctx.measureText(doppiettaBC).width; if ((chart.isDatasetVisible(0) === true) && (chart.isDatasetVisible(1) === true) && (chart.isDatasetVisible(2) === false)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaAB, x - (doppiettaABWidth / 2), (y-19 + datapoint.height)); } else if ((chart.isDatasetVisible(0) === false) && (chart.isDatasetVisible(1) === true) && (chart.isDatasetVisible(2) === true)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaBC, x - (doppiettaBCWidth / 2), y-19); } else if ((chart.isDatasetVisible(0) === true) && (chart.isDatasetVisible(1) === false) && (chart.isDatasetVisible(2) === true)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(doppiettaAC, x - (doppiettaACWidth / 2), y-19); } else if (chart.isDatasetVisible(0) && chart.isDatasetVisible(1) && chart.isDatasetVisible(2)) { ctx.font = TooltipFont; ctx.fontSize = TooltipFontSize; ctx.fillStyle = TooltipLightColore; ctx.fillText(tripletta, x - (triplettaWidth / 2), y-19); } else { //console.log("una sola colonna è visibile"); }; ctx.restore(); } }) }) } }; const logo = new Image(); logo.src = 'https://www.garr.it/images/logo-garr-grafici.png'; const LogoGARR = { id: 'LogoGARR', beforeDraw(chart, args, options) { const {ctx, chartArea: { top, bottom, left, right} } = chart; const logoWidth = 100; const logoHeight = 34; ctx.save(); if ((logo.complete) && (ctx.canvas.offsetWidth > 640)) { ctx.drawImage(logo, ctx.canvas.offsetWidth - (logoWidth + 10), ctx.canvas.offsetHeight - (logoHeight + 10), logoWidth, logoHeight); } else { logo.onload = () => chart.draw(); }; ctx.restore(); } } const CapacitaAggregataBackboneDataUno = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Aggregated capacity (Gbps)', data: [2550, 2950, 3020, 3130, 3130], pointBackgroundColor: ArrayColoreBordo[0], backgroundColor: ArrayColoreSfondo[0], borderColor: ArrayColore[0], borderWidth: 1, fill: true, stepped: 'middle', }] }; const CapacitaAggregataBackboneDataDue = { tricodemo: 2, labels: ['2012', '2013', '2014', '2015', '2016'], datasets: [{ label: 'Aggregated capacity (Gbps)', data: [548, 833, 860, 1890, 2040], pointBackgroundColor: ArrayColoreBordo[0], backgroundColor: ArrayColoreSfondo[0], borderColor: ArrayColore[0], borderWidth: 1, fill: true, stepped: 'middle', }] }; const optionsCAB = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Backbone links aggregated capacity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, max: 3500, title: { text: 'Aggregated capacity (Gbps)', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { if (!(numeroScheda)) {numeroScheda="-2"}; var CanvasTemp = CapacitaAggregataBackboneGraficoHD; var a = document.getElementById('CapacitaAggregataBackbone_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'capacita-aggregata-link-di-backbone-GARR-'+numeroScheda+'-en.png'; } } } const CapacitaAggregataBackboneConfig = { type: 'line', data: CapacitaAggregataBackboneDataUno, options: optionsCAB, plugins: [mostraEtichetteSopra, sfondoBianco, LogoGARR] }; const CapacitaAggregataBackboneGrafico = new Chart( document.getElementById('CapacitaAggregataBackbone'), CapacitaAggregataBackboneConfig ); const CapacitaAggregataBackboneGraficoHD = new Chart( document.getElementById('CapacitaAggregataBackboneHD'), CapacitaAggregataBackboneConfig ); const optionsCAA = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Access links aggregated capacity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, max: 4000, title: { text: 'Aggregated capacity (Gbps)', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { if (!(numeroScheda)) {numeroScheda="-2"}; var CanvasTemp = CapacitaAggregataAccessoGraficoHD; var a = document.getElementById('CapacitaAggregataAccesso_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'capacita-aggregata-link-di-accesso-GARR-'+numeroScheda+'-en.png'; } } } const CapacitaAggregataAccessoDataUno = { tricodemo: 1, labels: ['2017', '2018', '2019', '2020', '2021'], datasets: [{ label: 'Capacity (Gbps)', data: [1580, 1840, 2000, 3440, 3700], pointBackgroundColor: ArrayColoreBordo[1], backgroundColor: ArrayColoreSfondo[1], borderColor: ArrayColore[1], borderWidth: 1, fill: true, stepped: 'middle', }] }; const CapacitaAggregataAccessoDataDue = { tricodemo: 2, labels: ['2012', '2013', '2014', '2015', '2016'], datasets: [{ label: 'Capacity (Gbps)', data: [479, 659, 836, 1150, 1360], pointBackgroundColor: ArrayColoreBordo[1], backgroundColor: ArrayColoreSfondo[1], borderColor: ArrayColore[1], borderWidth: 1, fill: true, stepped: 'middle', }] }; const CapacitaAggregataAccessoConfig = { type: 'line', data: CapacitaAggregataAccessoDataUno, options: optionsCAA, plugins: [mostraEtichetteSopra, sfondoBianco, LogoGARR] }; const CapacitaAggregataAccessoGrafico = new Chart( document.getElementById('CapacitaAggregataAccesso'), CapacitaAggregataAccessoConfig ); const CapacitaAggregataAccessoGraficoHD = new Chart( document.getElementById('CapacitaAggregataAccessoHD'), CapacitaAggregataAccessoConfig ); const optionsCLB = { maintainAspectRatio: false, // true layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Backbone links capacity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'links', } } } const CapacitaLinkBackboneData = { // 2021 labels: ['≥ 100 Gbps', '< 100 Gbps', '≤ 10 Gbps', '≤ 1 Gbps'], datasets: [{ label: '2021', data: [10, 32, 76, 32], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const CapacitaLinkBackboneConfig = { type: 'doughnut', data: CapacitaLinkBackboneData, options: optionsCLB, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CapacitaLinkBackboneGrafico = new Chart( document.getElementById('CapacitaLinkBackbone'), CapacitaLinkBackboneConfig ); const optionsCLBHD = { maintainAspectRatio: false, // true layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Backbone links capacity', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'links', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectCLB'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = CapacitaLinkBackboneGraficoHD; var a = document.getElementById('CapacitaLinkBackbone_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'capacita-link-di-backbone-GARR-'+annoSelezionato+'-en.png'; } } } const CapacitaLinkBackboneConfigHD = { type: 'doughnut', data: CapacitaLinkBackboneData, options: optionsCLBHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CapacitaLinkBackboneGraficoHD = new Chart( document.getElementById('CapacitaLinkBackboneHD'), CapacitaLinkBackboneConfigHD ); const optionsCLA = { maintainAspectRatio: false, // true layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Backbone access links', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'links', } } } const CapacitaLinkAccessoData = { // 2021 labels: ['< 0.1 Gbps', '≥ 0.1 Gbps', '≥ 1 Gbps', '≥ 10 Gbps'], datasets: [{ label: '2021', data: [12, 360, 334, 151], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const CapacitaLinkAccessoConfig = { type: 'doughnut', data: CapacitaLinkAccessoData, options: optionsCLA, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CapacitaLinkAccessoGrafico = new Chart( document.getElementById('CapacitaLinkAccesso'), CapacitaLinkAccessoConfig ); const optionsCLAHD = { maintainAspectRatio: false, // true layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Backbone access links', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'links', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectCLA'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = CapacitaLinkAccessoGraficoHD; var a = document.getElementById('CapacitaLinkAccesso_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'capacita-link-di-accesso-GARR-'+annoSelezionato+'-en.png'; } } } const CapacitaLinkAccessoConfigHD = { type: 'doughnut', data: CapacitaLinkAccessoData, options: optionsCLAHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const CapacitaLinkAccessoGraficoHD = new Chart( document.getElementById('CapacitaLinkAccessoHD'), CapacitaLinkAccessoConfigHD ); const optionsVTT = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Total traffic volume on the GARR network', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Year', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, title: { text: 'Petabyte: 1PB = 1.000.000 GB', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = VolumeTrafficoTotaleGraficoHD; var a = document.getElementById('VolumeTrafficoTotale_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'volume-traffico-totale-rete-GARR-en.png'; } } } const VolumeTrafficoTotaleData = { labels: ['2013', '2014', '2015', '2016', '2017', '2018', '2019','2020','2021'], datasets: [{ label: 'Total traffic volume on the GARR network', data: [118, 126, 172, 306, 301, 384, 492, 460, 506], pointBackgroundColor: ArrayColoreBordo[0], backgroundColor: ArrayColoreSfondo[0], borderColor: ArrayColore[0], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const VolumeTrafficoTotaleConfig = { type: 'line', data: VolumeTrafficoTotaleData, options: optionsVTT, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const VolumeTrafficoTotaleGrafico = new Chart( document.getElementById('VolumeTrafficoTotale'), VolumeTrafficoTotaleConfig ); const VolumeTrafficoTotaleGraficoHD = new Chart( document.getElementById('VolumeTrafficoTotaleHD'), VolumeTrafficoTotaleConfig ); const optionsVTP = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Traffic volume of the GARR network peering', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: true }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, datalabels: { color: '#fff', formatter: function(value, context) { return value.toLocaleString().replaceAll('.',',') } } }, scales: { x: { beginAtZero: false, title: { text: 'Month', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { callback: function(TestoLungo) { const NuovoTesto = this.getLabelForValue(TestoLungo); const TestoCorto = NuovoTesto.substr(0, 3); return TestoCorto; }, color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, }, y: { beginAtZero: true, max: 500, title: { text: 'Petabyte: 1PB = 1.000.000 GB', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } }, stacked: true, } }, animation: { onComplete: function() { var CanvasTemp = VolumeTrafficoPeeringGraficoHD; var a = document.getElementById('VolumeTrafficoPeering_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'volume-traffico-peering-rete-GARR-en.png'; } } } const VolumeTrafficoPeeringData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [{ label: 'Internet Exchange', data: [51, 55, 67, 61, 65, 57, 52, 35, 63, 78, 84, 66], backgroundColor: ArrayColore[3], borderColor: ArrayColoreBordo[3], borderWidth: BordoSpessore },{ label: 'Research', data: [245, 155, 192, 164, 195, 194, 218, 171, 172, 310, 333, 377], backgroundColor: ArrayColore[0], borderColor: ArrayColoreBordo[0], borderWidth: BordoSpessore },{ label: 'Upstream & Direct peerings', data: [38, 45, 51, 48, 52, 41, 39, 26, 48, 61, 63, 52], backgroundColor: ArrayColore[2], borderColor: ArrayColoreBordo[2], borderWidth: BordoSpessore }] }; const VolumeTrafficoPeeringConfig = { type: 'bar', data: VolumeTrafficoPeeringData, options: optionsVTP, plugins: [sfondoBianco, ChartDataLabels, sommaTreColonne, LogoGARR] }; const VolumeTrafficoPeeringGrafico = new Chart( document.getElementById('VolumeTrafficoPeering'), VolumeTrafficoPeeringConfig ); const VolumeTrafficoPeeringGraficoHD = new Chart( document.getElementById('VolumeTrafficoPeeringHD'), VolumeTrafficoPeeringConfig ); const optionsVAP = { maintainAspectRatio: false, layout: { padding: { right:SpazioDestra } }, plugins: { title: { text: 'Traffic volume of the accesses and peerings', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: 'bottom', labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } } }, scales: { x: { beginAtZero: false, title: { text: 'Month', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { callback: function(TestoLungo) { const NuovoTesto = this.getLabelForValue(TestoLungo); const TestoCorto = NuovoTesto.substr(0, 3); return TestoCorto; }, color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } }, y: { beginAtZero: true, max:60, title: { text: 'Petabyte: 1PB = 1.000.000 GB', display: AssiVisualizza, align: AssiAllinea, padding: AssiPadding, color: AssiColore, font: { family: AssiFont, size: AssiFontSize, style: AssiStile, } }, ticks: { color: TicksColore, font: { family: TicksFont, size: TicksFontSize, style: TicksStile } } } }, animation: { onComplete: function() { var CanvasTemp = VolumeAccessiPeeringGraficoHD; var a = document.getElementById('VolumeAccessiPeering_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'volume-accesso-peering-rete-GARR-en.png'; } } } const VolumeAccessiPeeringData = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [{ label: 'Traffic volume of accesses and peerings', data: [42, 33, 39, 36, 39, 38, 41, 31, 38, 55, 56, 59], pointBackgroundColor: ArrayColoreBordo[0], backgroundColor: ArrayColoreSfondo[0], borderColor: ArrayColore[0], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 },{ label: 'Research', data: [25, 16, 19, 16, 20, 19, 22, 17, 17, 31, 33, 38], pointBackgroundColor: ArrayColoreBordo[1], backgroundColor: ArrayColoreSfondo[1], borderColor: ArrayColore[1], borderWidth: 1, borderDash: [4, 4], fill: true, tension: 0.5 }] }; const VolumeAccessiPeeringConfig = { type: 'line', data: VolumeAccessiPeeringData, options: optionsVAP, plugins: [sfondoBianco, mostraEtichetteSopra, LogoGARR] }; const VolumeAccessiPeeringGrafico = new Chart( document.getElementById('VolumeAccessiPeering'), VolumeAccessiPeeringConfig ); const VolumeAccessiPeeringGraficoHD = new Chart( document.getElementById('VolumeAccessiPeeringHD'), VolumeAccessiPeeringConfig ); const optionsTTP = { maintainAspectRatio: false, plugins: { title: { text: 'Peering traffic type', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: posizioneLegenda, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'peerings', } } } const TipologiaTrafficoPeeringData = { // 2021 labels: ['Research', 'Internet Exchange', 'Upstream & Direct peerings'], datasets: [{ label: '2021', data: [274899, 73292, 31970], backgroundColor: ArrayColore, borderColor: Bianco, hoverBorderColor: Bianco, spacing: 10, hoverOffset: 4, borderRadius: 6, borderWidth: 3 }] }; const TipologiaTrafficoPeeringConfig = { type: 'doughnut', data: TipologiaTrafficoPeeringData, options: optionsTTP, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const TipologiaTrafficoPeeringGrafico = new Chart( document.getElementById('TipologiaTrafficoPeering'), TipologiaTrafficoPeeringConfig ); const optionsTTPHD = { maintainAspectRatio: false, plugins: { title: { text: 'Peering traffic type', display: TitoloVisualizza, align: TitoloAllinea, padding: TitoloPadding, color: TitoloColore, font: { family: TitoloFont, size: TitoloFontSize, style: TitoloStile, } }, tooltip: { enabled: false }, legend: { display: true, position: legendaImmagine, labels: { color: LabelColore, font: { family: LabelFont, size: LabelFontSize, style: LabelStile } } }, Contatore: { cosaMisura: 'peerings', } }, animation: { onComplete: function() { var annoSelect = document.getElementById('selectTTP'); var annoSelezionato = annoSelect.options[annoSelect.selectedIndex].text; var CanvasTemp = TipologiaTrafficoPeeringGraficoHD; var a = document.getElementById('TipologiaTrafficoPeering_link'); a.href = CanvasTemp.toBase64Image(); a.download = 'tipologia-traffico-peering-GARR-'+annoSelezionato+'-en.png'; } } } const TipologiaTrafficoPeeringConfigHD = { type: 'doughnut', data: TipologiaTrafficoPeeringData, options: optionsTTPHD, plugins: [mostraEtichettePie, sfondoBianco, LogoGARR, Contatore] }; const TipologiaTrafficoPeeringGraficoHD = new Chart( document.getElementById('TipologiaTrafficoPeeringHD'), TipologiaTrafficoPeeringConfigHD ); function CambiaPeriodo(c , g, hd, d1, d2, k) { var trik = c.data.tricodemo; var chiave = k.id; var graficoSospeso = document.getElementById(chiave); graficoSospeso.classList.add("uk-link-muted"); graficoSospeso.href = "javascript:;"; if (trik == 1) { c.data = d2; g.update(); hd.data = d2; hd.update(); numeroScheda = "-1"; } else { c.data = d1; g.update(); hd.data = d1; hd.update(); numeroScheda = "-2"; } sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { graficoSospeso.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoCLB = document.getElementById('selectCLB'); periodoCLB.addEventListener('change', SelezionaPeriodoCLB) function SelezionaPeriodoCLB() { var lnk = document.getElementById('CapacitaLinkBackbone_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoCLB.value.split(','); CapacitaLinkBackboneGrafico.data.datasets[0].data = periodoCLB.value.split(','); CapacitaLinkBackboneGrafico.options.plugins.title.text = 'Backbone links aggregated capacity in ' + periodoCLB.options[periodoCLB.selectedIndex].text; CapacitaLinkBackboneGrafico.options.plugins.legend.position = posizioneLegenda; CapacitaLinkBackboneGrafico.update(); CapacitaLinkBackboneGraficoHD.data.datasets[0].data = periodoCLB.value.split(','); CapacitaLinkBackboneGraficoHD.options.plugins.title.text = 'Backbone links aggregated capacity in ' + periodoCLB.options[periodoCLB.selectedIndex].text; CapacitaLinkBackboneGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoCLA = document.getElementById('selectCLA'); periodoCLA.addEventListener('change', SelezionaPeriodoCLA) function SelezionaPeriodoCLA() { var lnk = document.getElementById('CapacitaLinkAccesso_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; periodoCLA.value.split(','); CapacitaLinkAccessoGrafico.data.datasets[0].data = periodoCLA.value.split(','); CapacitaLinkAccessoGrafico.options.plugins.title.text = 'Access links aggregated capacity in ' + periodoCLA.options[periodoCLA.selectedIndex].text; CapacitaLinkAccessoGrafico.options.plugins.legend.position = posizioneLegenda; CapacitaLinkAccessoGrafico.update(); CapacitaLinkAccessoGraficoHD.data.datasets[0].data = periodoCLA.value.split(','); CapacitaLinkAccessoGraficoHD.options.plugins.title.text = 'Access links aggregated capacity in ' + periodoCLA.options[periodoCLA.selectedIndex].text; CapacitaLinkAccessoGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoVTP = document.getElementById('selectVTP'); periodoVTP.addEventListener('change', SelezionaPeriodoVTP) function SelezionaPeriodoVTP() { var lnk = document.getElementById('VolumeTrafficoPeering_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; VolumeTrafficoPeeringGrafico.options.plugins.title.text = 'Traffic volume of the GARR network peering in ' + periodoVTP.options[periodoVTP.selectedIndex].text; var alfa = periodoVTP.value.split(';'); var a = alfa[0]; var b = alfa[1]; var c = alfa[2]; VolumeTrafficoPeeringGrafico.data.datasets[0].data = a.split(','); VolumeTrafficoPeeringGrafico.data.datasets[1].data = b.split(','); VolumeTrafficoPeeringGrafico.data.datasets[2].data = c.split(','); VolumeTrafficoPeeringGrafico.update(); VolumeTrafficoPeeringGraficoHD.data.datasets[0].data = a.split(','); VolumeTrafficoPeeringGraficoHD.data.datasets[1].data = b.split(','); VolumeTrafficoPeeringGraficoHD.data.datasets[2].data = c.split(','); VolumeTrafficoPeeringGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoVAP = document.getElementById('selectVAP'); periodoVAP.addEventListener('change', SelezionaPeriodoVAP) function SelezionaPeriodoVAP() { var lnk = document.getElementById('VolumeAccessiPeering_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; VolumeAccessiPeeringGrafico.options.plugins.title.text = 'Traffic volume of the accesses and peerings in ' + periodoVAP.options[periodoVAP.selectedIndex].text; var alfa = periodoVAP.value.split(';'); var a = alfa[0]; var b = alfa[1]; VolumeAccessiPeeringGrafico.data.datasets[0].data = a.split(','); VolumeAccessiPeeringGrafico.data.datasets[1].data = b.split(','); VolumeAccessiPeeringGrafico.update(); VolumeAccessiPeeringGraficoHD.data.datasets[0].data = a.split(','); VolumeAccessiPeeringGraficoHD.data.datasets[1].data = b.split(','); VolumeAccessiPeeringGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } const periodoTTP = document.getElementById('selectTTP'); periodoTTP.addEventListener('change', SelezionaPeriodoTTP) function SelezionaPeriodoTTP() { var lnk = document.getElementById('TipologiaTrafficoPeering_link'); lnk.classList.add("uk-link-muted"); lnk.href = "javascript:;"; TipologiaTrafficoPeeringGrafico.options.plugins.title.text = 'Peering traffic type in ' + periodoTTP.options[periodoTTP.selectedIndex].text; TipologiaTrafficoPeeringGrafico.options.plugins.legend.position = posizioneLegenda; periodoTTP.value.split(','); TipologiaTrafficoPeeringGrafico.data.datasets[0].data = periodoTTP.value.split(','); TipologiaTrafficoPeeringGrafico.update(); TipologiaTrafficoPeeringGraficoHD.options.plugins.title.text = 'Peering traffic type in ' + periodoTTP.options[periodoTTP.selectedIndex].text; periodoTTP.value.split(','); TipologiaTrafficoPeeringGraficoHD.data.datasets[0].data = periodoTTP.value.split(','); TipologiaTrafficoPeeringGraficoHD.update(); sospendiLink = setInterval(togliMuto, 1000); function togliMuto() { lnk.classList.remove("uk-link-muted"); clearInterval(sospendiLink); } } $(function(){ $('#selectGrafico').on('change', function () { var url = $(this).val(); if (url) { window.location = url; } return false; }); });

Informativa ai sensi degli artt. 13 e 14 GDPR per il trattamento di dati personali consistenti in registrazioni audio, video e fotografiche

15 May 2018 | GARR

Con il presente documento il GARR desidera informarla che il "Regolamento Europeo 679/2016 relativo alla protezione delle persone fisiche con riguardo al Trattamento dei Dati Personali, nonché alla libera circolazione di tali dati" (da ora in poi "GDPR"), prevede la tutela delle persone rispetto al trattamento dei loro dati personali.

Luogo di trattamento dei dati

Consortium GARR con sede in via dei Tizii, 6 - 00185 - Roma - Italia

Tipologia dati oggetto di trattamento

il Consortium GARR tratterà i suoi dati personali consistenti in registrazioni audio, foto e video recanti la sua immagine e/o la sua voce, così come altri dati da cui si possa desumere la sua identità. I predetti dati possono essere acquisiti e trattati sia in formato cartaceo che digitale.

Titolare del trattamento e contatti

Il Consortium GARR, associazione riconosciuta senza scopo di lucro con sede in via dei Tizii, 6 - 00185 – Roma - Italia, in qualità di "Titolare del trattamento” dei suoi dati personali, ai sensi dell'articolo 13 del GDPR, Le fornisce i seguenti dati di contatto:

Dati di contatto

Titolare del trattamento dei dati personali:

Il Consortium GARR
tel: +39 4962 2000
contatto mail: This email address is being protected from spambots. You need JavaScript enabled to view it.

Responsabile protezione dei dati personali:

Dott. Davide Vaghetti
tel: +39 050 2213158
contatto mail: This email address is being protected from spambots. You need JavaScript enabled to view it.

Ai sensi dell’art. 79 GDPR l'interessato che ritenga che i diritti di cui gode siano stati violati a seguito del presente trattamento ha diritto a rivolgersi all'Autorita' competente per la protezione dei dati. Ente preposto: Garante per la Protezione dei Dati Personali italiano.

Finalità del trattamento

I dati personali oggetto della presente informativa saranno oggetto di pubblicazione o diffusione a scopo divulgativo, informativo, di ricerca o scientifico, anche previo montaggio di spezzoni o singoli fotogrammi, per le finalità istituzionali proprie del Consortium GARR e segnatamente per la pubblicazione sul sito internet del GARR e dei suoi associati, nonché per le pubblicazioni, senza finalità commerciali, sui canali social del Consortium GARR (Facebook, Youtube, Instagram, Twitter) su carta stampata e/o su qualsiasi altro mezzo di diffusione.

Modalità di trattamento dei dati

I dati personali da Voi forniti, ivi incluso il ritratto contenuto nelle fotografie/video, formeranno oggetto di operazioni di trattamento nel rispetto della vigente normativa e dei principi di correttezza, liceità, trasparenza e riservatezza cui è ispirata l'attività del Consortium GARR. Tali dati verranno trattati sia con strumenti informatici sia su supporti cartacei sia su ogni altro tipo di supporto idoneo, nel rispetto delle misure di sicurezza previste dal GDPR.

Obbligatorietà o meno del consenso

Il conferimento dei Suoi dati è facoltativo se non strettamente correlato al funzionamento dell'attività o al servizio proposto. Il mancato consenso non permetterà l'utilizzo delle immagini e/o delle riprese audiovisive del soggetto interessato per le finalità sopra indicate.

Comunicazione a terzi e pubblicazione-diffusione dei dati

Nei limiti pertinenti alle finalità di trattamento indicate, i dati personali (immagini e riprese audiovisive) potranno essere oggetto di comunicazione, pubblicazione e/o diffusione in qualsiasi forma sui siti internet del Consortium GARR, sui canali social del Consortium GARR (Facebook, Youtube, Instagram, Twitter) su carta stampata e/o su qualsiasi altro mezzo di diffusione.

Dichiarazione di consenso

Io sottoscritto, dichiaro di avere preso visione dell’informativa in materia di Privacy soprariportata e acconsento al trattamento dei miei dati personali di cui autorizzo la diffusione e pubblicazione nei limiti di quanto sopra descritto in conformità al GDPR. Acconsento alla conservazione dei predetti dati per la durata statutariamente prevista dell’Associazione Consortium GARR.

Diritti degli Interessati

In relazione ai predetti trattamenti potranno essere da Lei esercitati i diritti di cui agli artt. da 15 a 22 GDPR, quali:

  • ottenere la conferma circa l'esistenza o meno di dati che La riguardano;
  • conoscere l'origine dei dati, la logica e la finalità su cui si basa il trattamento;
  • ottenere la cancellazione, la trasformazione in forma anonima o il blocco di dati eventualmente trattati in violazione di Legge, l'aggiornamento, la rettifica e l'integrazione dei dati stessi;
  • opporsi, per motivi legittimi, al trattamento dei dati stessi nei limiti ed alle condizioni previste.

Per l’esercizio dei propri diritti l’interessato può rivolgere la propria istanza al Consortium GARR, Via dei Tizii, 6, 00185 – Roma: telefonando al numero +39 0649622000, mandando un fax al numero +39 0649622044 o inviando una mail all'indirizzo This email address is being protected from spambots. You need JavaScript enabled to view it.. Ulteriori informazioni in ordine al trattamento ed alla comunicazione di dati previsti direttamente o altrimenti acquisiti potranno essere richieste al Responsabile per la Protezione dei dati personali presso la sede del Consortium GARR all’indirizzo e-mail: This email address is being protected from spambots. You need JavaScript enabled to view it..
La sottoscrizione della presente comunicazione deve intendersi quale consenso espresso al trattamento dei Suoi dati personali.
Ulteriori informazioni circa il trattamento dei dati potranno essere comunicate anche verbalmente.

Modulo per il download

  • pdf Informativa ai sensi degli artt. 13 e 14 GDPR per il trattamento di dati personali consistenti in registrazioni audio, video e fotografiche(181 KB)

Liberatoria e consenso alla pubblicazione e trasmissione di immagini

15 May 2018 | GARR

Autorizzo

A titolo gratuito e senza limiti di tempo, anche ai sensi degli artt. 10 e 320 cod.civ. e degli artt. 96 e 97 legge 22.4.1941, n. 633 - Legge sul diritto d'autore:

  • la trasmissione e la pubblicazione e/o diffusione in qualsiasi forma di materiale audio, video o fotografico in cui il sottoscritto appaia rappresentato o sia comunque riconoscibile

Il materiale audio-video-fotografico che pregiudichi la dignità o il decoro delle persone interessate non sarà oggetto di trattamento e sarà immediatamente cancellato dagli Archivi del Consortium GARR.

La pubblicazione/diffusione potrà avvenire:

  • sui siti internet del Consortium GARR, Associazione riconosciuta senza scopo di lucro, con sede in via dei Tizii, 6 - 00185 - Roma - Italia;
  • sui canali social del Consortium GARR (Facebook, Youtube, Instagram, Twitter);
  • su carta stampata e/o su qualsiasi altro mezzo di diffusione/pubblicazione anche atipico;

Autorizzo altresì la conservazione del predetto materiale negli archivi informatici dell'associazione e prendo atto che la finalità di tali pubblicazioni sono di carattere informativo e divulgativo. Il materiale video-fotografico non sarà utilizzato per finalità commerciali.

Tale autorizzazione esclude qualsiasi uso a fini di lucro e la cessione a terzi.

In considerazione della circostanza che il predetto materiale, una volta reso pubblico, può essere oggetto di acquisizione e di ripubblicazione da parte di terzi, anche senza il consenso del Consortium GARR o dell’interessato,
Sollevo il Consortium GARR da ogni effetto pregiudizievole che possa derivare da un uso abusivo o scorretto da parte di terzi del predetto materiale audio-foto-video.

Confermo

di non aver nulla a pretendere in ragione di quanto sopra indicato e di rinunciare irrevocabilmente ad ogni diritto, azione o pretesa derivante da quanto sopra autorizzato.

Modulo per il download

  • pdf Liberatoria e consenso alla pubblicazione e trasmissione di immagini(294 KB)

GARR News

12 January 2018 | GARR

GARR NEWS is the bi-annual magazine dedicated to the GARR community and was created with the aim of creating a direct channel between GARR and its users.

Besides being a great opportunity to talk about new services offered and to take stock of situation of the network and its use, GARR NEWS has in fact the purpose of giving voice to those who daily use the network. Users themselves will have the opportunity to talk about innovative experiences and to play therefore an increasingly active role in the dissemination of applications in the GARR community, proposing those experiences as examples of excellence to be followed.

Do you have an interesting project? Tell us your story!

GN Archive

GARR News content, except where otherwise indicated, is released under the terms of the Creative Commons license, Attribution - Non Commercial

Number Web Pdf Numer Web Pdf Number 26 - summer 2022 pdf Number 25 - winter 2021 pdf Number 24 - summer 2021 pdf Number 23 - winter 2020 pdf Number 22 - summer 2020 pdf Number 21 - winter 2019 pdf Number 20 - summer 2019 pdf Number 19 - December 2018 pdf Number 18 - July 2018 pdf Number 17 - December 2017 pdf Number 16 - July 2017 pdf Number 15 - December 2016 pdf Number 14 - July 2016 pdf Number 13 - December 2015 pdf Number 12 - June 2015 pdf Number 11 - December 2014 pdf Number 10 - June 2014 pdf Number 9 - December 2013 pdf Number 8 - May 2013 pdf Number 7 - November 2012 pdf Number 6 - May 2012 pdf Number 5 - December 2011 pdf Number 4 - June 2011 pdf Number 3 - December 2010 pdf Number 2 - July 2010 pdf Number 1 - December 2009 pdf Number 0 - June 2009 pdf

Specials

Collections of articles, previously published, on specific topics.

  • pdf GARR News - Biomedical research collection(4.19 MB)
  • pdf GARR News - Cultural heritage collectioni(3.08 MB)
  • pdf GARR News - School collection(15.73 MB)

RegistrazioneTribunale di Roma n. 243/2009 del 21 July 2009 Direttore editorialeFederico Ruggieri Direttore responsabileGabriella PAOLINI CaporedattoreMaddalena VARIO RedazioneElis BERTAZZON, Marta MIELI, Federica TANLONGO, Carlo VOLPE Consulenti redazioneClaudio ALLOCCHIO, Giuseppe ATTARDI, Claudia BATTISTA, Mauro CAMPANELLA, Massimo CARBONI, Fulvio GALEAZZI, Marco MARLETTA, Sabrina TOMASSINI Progetto grafico (Cartaceo)Carlo VOLPE

ImpaginazioneFederica TANLONGO, Carlo VOLPE Progettazione WEBBruno NATI, Marco PANICCIA EditoreConsortium GARR
Via dei Tizii 6 - 00185 Roma
Tel. 06 49622000
fax. 06 49622044
email: This email address is being protected from spambots. You need JavaScript enabled to view it.
torna su