Skip to main content

EN

GARR-T Network

14 February 2022 | GARR

GARR-T, as in Terabit, is the new generation of GARR network. It is an evolution of the production network, including innovative features.

GARR-T is a cutting-edge network built around the users’ needs and designed to be future-proof. Key main benefits are the ability to adapt over time, rapidly scale-up and grow in terms of capacity, capillarity and provided services.

A new level of automation, enhanced reliability and measurability through advanced monitoring systems are GARR-T’s key innovations.

GARR-T in figures

The numbers of the new network are substantial: 700 km of new fibre optic sections are planned, 42 optical PoPs over approximately 6,000 km of optical fibre and 9 new metropolitan PoPs. 6 more cities will have a double PoP, to ensure redundancy and increase reliability.

The full infrastructure will be 10 times more powerful: the backbone capacity will grow from current 3.5 Tbps to 40 Tbps, while the aggregated access capacity will increase from 2 to 10 Tbps

The technologies

The new network is built with 2 key components: the packet layer and the optical layer.

EVOLUTION FROM THE CURRENT GARR-X NETWORK TO THE NEW GENERATION GARR-T NETWORK

The packet network will undergo a complete renovation, with the replacement of all network equipment now in operation over the national infrastructure. The new architecture is based on the data centre model, i.e. with Spine and Leaf nodes for access aggregation and Edge nodes for end points at the users premises. While ensuring uniformity and equal access to services, this model facilitates the reach of the network, ensuring optimal agility to smaller nodes and leaving the greater impact in terms of space and energy consumption to core nodes only.

IP Topology of the GARR-T Network

Maximize

Immagine 2

Actions financed by PNRR projects

Maximize

Immagine 1
Immagine 2

Optical network: flexible, efficient and sustainable

The optical network features important innovations fostering flexibility, adaptability to user needs and the creation of new services. It is based on a partially disaggregated model, where fibres and devices are seen as different components whose combination produces the optical transport hardware infrastructure. This model ensures both efficiency and long-term sustainability, as it separates the fibre and the equipment lifecyles, allowing to operate the network independently from a specific network equipment supplier, thus avoiding a technological lock-in. This innovative model is implemented through an Open Line System (OLS) and the use of optical fibres and of an advanced management and control software system. The result is an active infrastructure that is capable of routing any optical signal. The OLS technology caters for the flexible management of the optical spectrum, enabling spectrum sharing and the development and offer of innovative applications, such as time and frequency transport or Quantum Key Distribution.

New services

The GARR-T network is designed to offer users new services and empower them with the ability to configure and manage them independently, according to their specific needs.

Distributed computing

One of the most distinctive innovative services offered by GARR-T, is Data Centre Interconnection, i.e. the geographical interconnection of data centres as if they were in one location by using direct optical links. By leveraging the partially disaggregated model, the connected sites can directly interface with the Open Line System and create a dedicated optical channel (end-to-end). Thanks to the use of highly specialised and modular equipment, this feature can be offered at relatively low costs, allowing for savings in terms of space and energy consumption.
This model responds to the emerging computing model for large scientific collaborations known as “Data Lake”, in which data access and management takes place locally, while computing resources can be geographically distributed.

Optical paths and spectrum sharing

GARR-T foresees the introduction of optical paths (lightpaths) and spectrum sharing features, seen as the glue for new applications and technical opportunities for users. These services will be a key to seamless interconnection with international infrastructures, for example by making available a portion of the physical infrastructure through spectrum access.
Spectrum sharing is a key enabling factor to extend optical network functionalities wherever economic and geographical constraints are present, as in the case of submarine cables, or more generally of areas with limited or difficult coverage with fibre optics.

Monitoring and automation for a more reliable network

Thanks to the introduction of automation mechanisms, the network management in GARR-T is more efficient in the timely identification of possible malfunctioning and immediate reconfiguration at need.
Automation is fundamental in the new network: processes that used to be require the human intervention are now completely revised . An abstraction model is adopted, that represent the network according to its functions and not the sum of individual components. It is an event-driven model, with the ability to adapt to constant change, similar to the intention-driven model adopted in the ICT and cloud world to automatically evolve services.

Service implementation streamlining, for all needs

A new feature of GARR-T is the streamlining of service implementation. By leveraging a “containerised” approach to virtualisation, processes are broken down into many agile micro-services thus simplifying the service implementation. GARR-T can count on a distributed cloud infrastructure, with mini data centres being implemented in the geographical network nodes. These mini data centres will host both enabling infrastructure services (monitoring, security, AAI, analytics tools) and application services. Among the latter, we plan to offer virtualised network features, such as firewalls or Intrusion Detection Systems, in order to provide support to users who have fewer resources or technical skills.

Map of the GARR-T network with the interventions of the PNRR projects

Map of the GARR-T network with the interventions of the PNRR projects

Map of the GARR-T network with the interventions of the PNRR projects

Map of the GARR-T network with the interventions of the PNRR projects

Close

Gender Equality Plan

14 February 2022 | GARR

Gender Equality Plan

Our Commitment to Gender Equality

With the adoption of the Gender Equality Plan (GEP), GARR renews and strengthens its daily commitment to valuing differences – starting with gender – and to promoting an inclusive, fair and transparent organisational culture, free from bias.

The GEP represents a concrete strategy for advancing gender equality: a path that combines the consolidation of existing policies with the introduction of new measures aimed at removing remaining barriers and building an increasingly equitable environment for everyone.

  • Mission, Vision, Values
  • Gender equality plan
  • Training
  • #GARRforSTEM
  • gender-based violence
  • GARR GEP Team
  • GARR GEP 2026-2028

    GARR GEP
    2026-2028

    Versione in lingua italiana

    Download

  • Download GARR GEP 2026-2028

    GARR GEP
    2026-2028

    English version

    Download

  • Scarica il report di monitoraggio 2025

    Attività` svolte nel 2025

    Download

  • Scarica il report di monitoraggio 2024

    Attività` svolte nel 2024

    Download

  • Scarica il report di monitoraggio 2023

    Attività` svolte nel 2023

    Download

  • GEP 2023-2025 IT

  • GEP 2023-2025 EN

Training

Training

  • Cyber violence: legal, psychological and workplace aspects
    Italian language/ CC IT/EN

  • A positive work environment. Valuing diversity: inclusion, the fight against stereotypes, and age management
    Italian language/ CC IT/EN

Communication initiative #GARRforSTEM

Communication initiative section
  • #GARRforSTEM: Asia Marinelli tells about her experience as a Network Engineer

  • #GARRforSTEM: Claudia Battista speaks to the future STEM generation

  • #GARRforSTEM: Passion, tenacity and enthusiasm - Sabrina Tomassini's perspective

  • #GARRforSTEM: Simona Venuti's passion that ignited her future

Fighting gender-based violence section

Fighting gender-based violence

  • Digital violence has real consequences
  • In Italy, 63% of hate tweets target women
  • 52% of young women have experienced online abuse
  • Common forms of cyberviolence
  • Astroturfing: coordinated harmful content campaign
  • Revenge porn & sextortion: image-based abuse
  • Doxing: online disclosure of private information
  • Building a safe digital space for women

Download kit immagini

GARR GEP Team

GARR GEP Team section
Surname Name Office/Role Battista Claudia Director Bertazzon Elis Communications Office Ciurleo Nino Data Center Network Corleto Andrea Training and Education Office Fabiani Marcello Administration Lampis Simona Institutional Secretariat Landi Patrizia Human Resources - Technical and Institutional Secretariat, Manager Napolitano Eleonora Training and Education Office Pirelli Laura Technical Secretariat Volpe Carlo Communications Office, Manager
Information image

Would you like to know more?

This email address is being protected from spambots. You need JavaScript enabled to view it.

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)
torna su