Fatti:
A.
Nel dicembre 2006 la C._SA ha stipulato, quale committente, con la B._Sagl un contratto quadro (Master Agreement Information Management Services), che sostituiva i precedenti accordi e che definiva i termini e le condizioni della collaborazione fra i contraenti in materia di fornitura di servizi di gestione e di tecnologia delle informazioni. Concluso per un periodo indeterminato, poteva essere disdetto per la prima volta il 31 dicembre 2010 con un preavviso di 6 mesi. Le parti hanno poi sottoscritto 13 contratti di servizio (Service Level Agreements; SLA) a cui andavano applicati i termini e le condizioni della predetta convenzione. Il 15 ottobre 2009 la C._SA ha rescisso tutti i contratti con effetto immediato invocandone la violazione.
B.
Con petizione 13 dicembre 2011 la B._Sagl ha convenuto in giudizio innanzi al Pretore della giurisdizione di Mendrisio-nord la C._SA - che nel corso della causa ha mutato la propria ragione sociale in A._SA - per ottenere il pagamento di fr. 5'621'365.73, ridotti in sede di conclusioni a fr. 5'481'675.73, oltre interessi, e la restituzione di attrezzature e macchine. Il predetto montante era composto di fr. 102'060.-- legati ai costi di controllo e riassetto dei predetti strumenti, fr. 125'214.-- a saldo delle mercedi maturate prima della disdetta, fr. 5'225'835.38 per le mercedi previste fino alla scadenza del termine contrattuale e fr. 28'566.35 quale rifusione delle spese legali preprocessuali. Il Pretore ha, con sentenza 26 aprile 2017 e in parziale accoglimento della petizione, condannato la A._SA a versare alla B._Sagl fr. 227'274.--, oltre interessi, e a restituire le attrezzature e le macchine rivendicate. Dopo aver ritenuto ingiustificata la disdetta dei contratti, il Pretore ha considerato che domandando quale risarcimento del danno il guadagno lordo, l'attrice non aveva né allegato né dimostrato il danno. Per analoghi motivi ha respinto la richiesta di rimborso delle spese legali preprocessuali. Ha per contro reputato giustificata sia la richiesta di rimunerare il lavoro già svolto sia quella di risarcire i costi di controllo e riassetto delle macchine, che sono da restituire.
C.
La II Camera civile del Tribunale di appello del Cantone Ticino ha, con sentenza 22 gennaio 2019, in parziale accoglimento dell'appello della B._Sagl, aumentato a fr. 5'351'049.38 l'importo dovuto a quest'ultima. Ha posto le tasse di giustizia di prima e seconda istanza in ragione di 19/20 a carico della convenuta, la quale è pure stata condannata a pagare all'attrice fr. 87'500.-- rispettivamente fr. 45'000.-- a titolo di ripetibili parziali. Ha per contro respinto, nella misura in cui era ricevibile, l'appello incidentale della A._SA, ponendo integralmente a suo carico le spese processuali e le ripetibili di tale procedura. La Corte cantonale ha respinto o dichiarato inammissibili tutte le lamentele rivolte contro il mancato riconoscimento delle violazioni contrattuali imputate all'attrice e ha negato l'esistenza di giusti motivi che giustificherebbero la disdetta anticipata. Ha ritenuto che la B._Sagl ha sufficientemente sostanziato la sua perdita di guadagno, mentre la A._SA non è riuscita ad allegare e provare i risparmi attribuiti alla controparte in seguito alla fine dei rapporti contrattuali. Ha invece accolto le critiche della convenuta dirette contro la rifusione dei costi attinenti al controllo e al riassetto delle macchine, ragione per cui ha dedotto fr. 102'060.-- dalla pretesa attorea.
D.
Con ricorso in materia civile del 27 febbraio 2019 la A._SA postula, previo conferimento dell'effetto sospensivo al gravame, in via principale, l'integrale reiezione dell'appello principale e il parziale accoglimento dell'appello incidentale nel senso di essere condannata a pagare alla B._Sagl fr. 125'214.--, con la relativa modifica delle spese processuali di prima e seconda istanza. In via subordinata postula l'annullamento della sentenza di appello con il rinvio della causa al Pretore o al Tribunale di appello per nuova decisione. Lamenta una determinazione errata del danno e ribadisce diverse violazioni contrattuali ritenute idonee a giustificare la disdetta. Rimprovera alla Corte cantonale di avere a torto inserito nel giudizio sull'appello principale, invece che in quello sull'appello incidentale, l'accoglimento della censura diretta contro la rifusione dei costi di controllo e riassetto, falsando in questo modo il giudizio sulle spese processuali.
La B._Sagl ha proposto, con risposta 11 aprile 2019, di respingere sia la domanda di misure d'urgenza sia il ricorso.
Il 26 aprile 2019 la A._SA ha presentato una replica spontanea.
La Presidente della Corte adita ha respinto, con decreto 1° maggio 2019, la domanda di conferimento dell'effetto sospensivo.
La B._Sagl ha duplicato il 14 maggio 2019.

Diritto:
1.
Il ricorso in materia civile, presentato dalla parte soccombente nella procedura cantonale (<ref-law>), tempestivo (<ref-law>) e volto contro una sentenza finale (<ref-law>) emanata su ricorso dall'autorità ticinese di ultima istanza (<ref-law>) in una causa civile (<ref-law>) con un valore litigioso superiore a fr. 30'000.-- (<ref-law>), è in linea di principio ammissibile.
2.
Il Tribunale federale applica d'ufficio il diritto federale (<ref-law>). Tuttavia, tenuto conto dell'onere di allegazione e motivazione imposto dall'art. 42 cpv. 1 e 2 LTF, di regola esso considera solo gli argomenti proposti nell'atto di ricorso (<ref-ruling> consid. 1.4; <ref-ruling> consid. 2; <ref-ruling> consid. 1.1). Giusta l'<ref-law> nei motivi di un ricorso occorre spiegare in modo conciso perché l'atto impugnato viola il diritto. Per soddisfare l'obbligo di motivazione, il ricorrente deve discutere le considerazioni della decisione impugnata e indicare con precisione in che consiste la violazione del diritto (DTF <ref-ruling> consid. 2). In virtù dell'<ref-law> il Tribunale federale esamina la violazione di diritti costituzionali soltanto se tale censura è stata sollevata e motivata. Ciò significa che la parte ricorrente deve indicare in modo chiaro e dettagliato, con riferimento ai motivi della decisione impugnata, in che modo sarebbero stati violati i suoi diritti costituzionali (<ref-ruling> consid. 1.2; <ref-ruling> consid. 6).
Il Tribunale federale fonda la sua sentenza sui fatti accertati dall'autorità inferiore (<ref-law>). A questi appartengono sia le constatazioni concernenti le circostanze relative all'oggetto del litigio sia quelle riguardanti lo svolgimento della procedura innanzi all'autorità inferiore e in prima istanza, vale a dire gli accertamenti che attengono ai fatti procedurali (<ref-ruling> consid. 1.3.1 con riferimenti). Il Tribunale federale può unicamente rettificare o completare l'accertamento dei fatti dell'autorità inferiore, se esso è manifestamente inesatto o risulta da una violazione del diritto ai sensi dell'<ref-law> (<ref-law>). "Manifestamente inesatto" significa in questo ambito "arbitrario" (<ref-ruling> consid. 2; <ref-ruling> consid. 1.5).
La parte che critica la fattispecie accertata nella sentenza impugnata deve sollevare la censura e motivarla in modo preciso, come esige l'<ref-law> (<ref-ruling> consid. 2.3, con rinvii). Essa deve spiegare in maniera chiara e circostanziata in che modo queste condizioni sarebbero soddisfatte (<ref-ruling> consid. 1.3.1, con rinvii). Se vuole completare la fattispecie deve dimostrare, con precisi rinvii agli atti della causa, di aver già presentato alle istanze inferiori, rispettando le regole della procedura, i relativi fatti giuridicamente pertinenti e le prove adeguate (DTF <ref-ruling> consid. 2). Se la critica non soddisfa queste esigenze, le allegazioni relative a una fattispecie che si scosta da quella accertata non possono essere prese in considerazione (<ref-ruling> consid. 1.3.1). L'eliminazione del vizio deve inoltre poter essere determinante per l'esito del procedimento (<ref-law>). Le medesime esigenze di motivazione vigono per la risposta al ricorso (<ref-ruling> consid. 2).
3.
Prima di passare all'esame delle critiche concernenti le asserite lesioni contrattuali, occorre trattare la censura con cui la ricorrente si duole della mancata assunzione di una prova da lei proposta.
3.1. Riferendosi al documento intitolato "Request for information"e inviato dalla convenuta al Pretore il 10 gennaio 2014, la Corte cantonale ha indicato che il giudice di prime cure, pur avendo intimato lo scritto per osservazioni all'attrice che ha negato l'esistenza dei presupposti per una sua assunzione ex <ref-law>, non lo ha mai formalmente ammesso. L'autorità inferiore ha poi considerato che la convenuta aveva accettato - almeno implicitamente - che il giudice di primo grado emanasse la sua decisione senza tale documento, poiché non si era opposta alla chiusura dell'istruttoria. Da ciò ha infine dedotto che esso non andava nemmeno assunto in sede di appello.
3.2. La ricorrente ritiene che la decisione di non assumere il menzionato documento violi l'<ref-law> e il suo diritto di essere sentita. Sostiene che quando una prova è stata presentata dopo la chiusura della fase pre-dibattimentale, il giudice può statuire sulla sua validità nella decisione finale e che le parti sono legittimate ad impugnare innanzi all'autorità cantonale di ultima istanza la - mancata - ammissione della prova. Afferma inoltre di non aver rinunciato all'assunzione della prova, ma di aver semplicemente atteso che il Pretore si pronunciasse sulla sua ammissibilità. Del resto, continua la ricorrente, quest'ultimo avrebbe già ammesso la prova in questione, poiché essa faceva parte della serie di documenti che egli aveva invano ordinato all'attrice di produrre durante l'udienza del 15 gennaio 2013.
3.3. In concreto, l'ultima parte della censura si rivela di primo acchito inammissibile, perché apoditticamente fondata su una fattispecie che non risulta dalla sentenza impugnata. È poi pacifico che, nonostante l'assenza di una decisione sull'ammissibilità del documento, la ricorrente non si è opposta alla chiusura dell'istruttoria, la quale si era peraltro ancora protratta per più di due anni dopo il suo invio. Inferendo dalla predetta passività nella procedura innanzi al Pretore una rinuncia - implicita - alla prova in questione, la Corte cantonale non ha violato il diritto federale. Quest'ultimo è pure stato rispettato quando essa ha rifiutato, in applicazione del principio della buona fede (<ref-law>), di procedere all'assunzione del documento in sede di appello (<ref-ruling> consid. 4.3.2 con rinvii).
4.
La ricorrente aveva invano giustificato l'immediata rescissione, invocando delle violazioni contrattuali da parte dell'opponente. Nel ricorso in esame essa lamenta che talune di queste non sono state a torto ritenute dall'autorità inferiore.
4.1.
4.1.1. Riferendosi alle interruzioni / disconnessioni della rete geografica (Wide Area Network; WAN) riscontrate in concomitanza alla messa in funzione di un ampliamento di uno specificato ambiente software, la Corte cantonale ha disatteso le censure secondo cui la predetta rete sarebbe stata pianificata e concepita dall'attrice.
4.1.2. La ricorrente lamenta un'interpretazione errata della volontà soggettiva delle parti e asserisce che fin dal 2005 l'opponente si era impegnata a concepire e pianificare tale rete per tutta la durata della loro relazione contrattuale, lo SLA n. 12 limitandosi a confermare tale dovere. Si duole pure di un accertamento manifestamente errato dei fatti, affermando che le precedenti autorità giudiziarie si erano basate esclusivamente sulla perizia e sulla deposizione del teste D._, ignorando altre prove.
4.1.3. Nella larga misura in cui si basa sul documento intitolato "Request for information", la censura è di primo acchito inammissibile (v. supra consid. 3). Altrettanto vale per il resto dell'argomentazione ricorsuale, per altro solo vagamente riferita alla sentenza impugnata, con cui la ricorrente si limita in sostanza ad affermare in maniera appellatoria che l'autorità inferiore non ha accertato l'esistenza una concorde volontà soggettiva delle parti nel senso da lei auspicato senza però in alcun modo dimostrare che così facendo questa sia caduta nell'arbitrio.
4.2.
4.2.1. La Corte cantonale ha ritenuto che non è possibile dedurre dalla garanzia di una disponibilità del 98 % dei singoli dispositivi della rete geografica data dall'opponente che quest'ultima avesse pure garantito una disponibilità dell'intera rete del 96 %. Da un lato, essa ha considerato tale tesi irricevibile perché presentata per la prima volta in sede di appello e, dall'altro, ha osservato che il mancato raggiungimento della percentuale riferita all'intera rete nemmeno risulta dagli atti.
4.2.2. La ricorrente lamenta che il Pretore si sarebbe limitato a rinviare alle risultanze peritali, senza determinare la volontà delle parti. Contesta poi di essersi prevalsa in sede di appello di un nuovo fatto irricevibile, ma ritiene di avere presentato un ammissibile argomento giuridico. La Corte cantonale non avrebbe nemmeno capito "il tema centrale" della censura, e cioè che, assicurando una disponibilità dei singoli dispositivi WAN, l'opponente avrebbe automaticamente garantito la disponibilità della rete. La ricorrente continua asserendo di avere dimostrato che la disponibilità della rete era stata più volte gravemente compromessa, ragione per cui gli obblighi assunti non sarebbero stati rispettati.
4.2.3. In concreto la censura è del tutto inconferente. Infatti, pur prevalendosi di un inadempimento contrattuale, la ricorrente neppure indica con un minimo di chiarezza quale, a suo modo di vedere, sarebbe stata la percentuale di disponibilità della rete concordata fra le parti e quella in cui la rete è stata invece effettivamente utilizzabile.
4.3.
4.3.1. Per quanto attiene all'obbligo di monitorare il sistema 24 ore al giorno per sette giorni la settimana, la Corte cantonale ha ritenuto che incombeva alla convenuta provare l'insufficienza del funzionamento dell'help desk instaurato dall'attrice. Ha poi negato che dal doc. 12 risulti la pretesa violazione contrattuale e ha indicato che la convenuta non solo ha irritualmente sollevato per la prima volta in sede di appello che l'attrice non aveva collaborato all'assunzione delle prove, ma aveva pure omesso di specificare a quali prove si riferisse.
4.3.2. La ricorrente afferma che sarebbe spettato all'opponente dimostrare l'esistenza di un monitoraggio effettivo della rete e lamenta una violazione del diritto di essere sentita, perché la decisione impugnata sarebbe "silente" su questo punto. La Corte cantonale avrebbe poi pure erroneamente messo a suo carico la prova del cattivo adempimento del contratto, violando ancora una volta l'<ref-law>, quando sarebbe in realtà l'attrice, che domanda il pagamento della sua mercede, a dover essere gravata da tale onere.
4.3.3. In concreto giova innanzi ricordare che la ricorrente si era prevalsa del preteso mancato monitoraggio quale asserita violazione contrattuale, che avrebbe dovuto giustificare la rescissione. Ora, contrariamente a quanto ritenuto nel ricorso, compete alla parte che si fonda su un motivo di disdetta provare il suo verificarsi. Atteso che nemmeno la ricorrente afferma di aver dimostrato l'asserita violazione contrattuale, il preteso silenzio dell'autorità cantonale è del tutto ininfluente per l'esito del giudizio.
5.
Appurato che la ricorrente non può essere seguita quando ritiene che la disdetta immediata fosse legittimata da violazioni contrattuali, giova chinarsi sulla natura delle pretese fatte valere dall'opponente. A tal proposito i Giudici d'appello hanno respinto, citando gli allegati presentati in prima istanza, la censura con cui questa aveva affermato di avere chiesto l'adempimento del contratto da parte della convenuta e non semplicemente il risarcimento del danno. Essi hanno pure aggiunto che, qualora avesse voluto pretendere le mercedi in adempimento del contratto, l'attrice avrebbe dovuto allegare di avere già eseguito la sua prestazione oppure di averla invano regolarmente offerta.
Nella risposta l'opponente ribadisce, citando altri stralci dei suoi allegati, di non avere solo chiesto un risarcimento dei danni, ma anche l'adempimento del contratto e di non aver eseguito le sue prestazioni perché la ricorrente glielo aveva impedito. Sennonché tali argomentazioni appellatorie, con cui l'opponente nemmeno tenta di dimostrare che l'accertamento della Corte cantonale concernente il contenuto degli allegati sia arbitrario, si rivelano inammissibili. È poi necessario osservare che, contrariamente a quanto ritiene la ricorrente, il fatto che l'opponente abbia vanamente proposto in appello la predetta censura non ha per conseguenza che la Corte cantonale avrebbe dovuto respingere integralmente la petizione, pena una violazione degli <ref-law> e 8 CC. La presente sentenza sarà fondata sulla constatazione del giudizio impugnato secondo cui è stato unicamente chiesto un risarcimento dei danni in seguito all'ingiustificata disdetta immediata del rapporto contrattuale.
6.
Per costante dottrina e giurisprudenza il danno si definisce come una diminuzione involontaria del patrimonio netto; esso corrisponde alla differenza fra lo stato attuale del patrimonio del danneggiato e quello che tale patrimonio avrebbe se l'evento dannoso non si fosse prodotto. Il danno può presentarsi sotto forma di una diminuzione dell'attivo, di un aumento del passivo, di un mancato aumento dell'attivo rispettivamente di una mancata diminuzione del passivo (<ref-ruling> consid. 4.4.2, con rinvii). La nozione di danno e i principi applicabili alla sua determinazione attengono al diritto, mentre la sua esistenza e il suo ammontare riguardano l'accertamento dei fatti (<ref-ruling> consid. 6.2 pag. 167, con rinvii). Con riferimento alla ripartizione dell'onere probatorio occorre ricordare che spetta alla parte attrice, che domanda il risarcimento, provare che il suo patrimonio è diminuito in seguito al danno, mentre incombe al danneggiatore provare eventuali misure atte a ridurre il danno e la compensazione di vantaggi (sentenza 4C.137/2006 del 17 gennaio 2008 consid. 3.3; <ref-ruling> consid. 2d/cc pag. 28 seg.). La parte che sopporta l'onere della prova è pure gravata dall'onere di allegazione (<ref-ruling> consid. 4.3 pag. 465). Inoltre, quando, come in concreto, è applicabile la massima dispositiva il giudice deve unicamente assumere i mezzi di prova concernenti fatti pertinenti debitamente contestati (<ref-ruling> consid. 5.1).
6.1. Dopo aver dichiarato irricevibile per carenza di motivazione la censura secondo cui l'attrice non avrebbe sufficientemente sostanziato negli allegati preliminari la sua perdita di guadagno lorda, la Corte cantonale ha aggiunto che la critica avrebbe dovuto essere respinta anche nel merito in ragione del contenuto della petizione e della replica. Essa ha poi indicato che la convenuta, gravata dal relativo onere, non ha validamente né allegato né provato l'entità delle spese o dei costi eventualmente risparmiati dall'attrice in seguito all'interruzione del rapporto contrattuale.
6.2. La ricorrente rimprovera alla Corte cantonale di aver accordato quale risarcimento del danno la mercede lorda, sebbene l'opponente abbia unicamente diritto al suo danno netto. Afferma poi che l'autorità inferiore avrebbe pure ripartito in modo errato l'onere della prova, perché spetterebbe a colui che pretende il risarcimento dimostrare il danno netto subito, deducendo quindi pure quanto risparmiato in seguito alla mancata continuazione del contratto. Essa sostiene pure di aver sufficientemente contestato il danno, ancorché, vista la carente allegazione dell'attrice, non sarebbe nemmeno stata tenuta a farlo.
6.3. In concreto la Corte cantonale ha accordato all'opponente il risarcimento dell'interesse positivo, vale a dire l'interesse che questa aveva nell'esecuzione dei contratti, che sono stati pacificamente qualificati come contratti innominati con elementi del contratto di appalto. La ricorrente, pur dilungandosi sulla nozione di danno, a ragione non contesta che, giusta la giurisprudenza (<ref-ruling> consid. 4b), il creditore a cui è riconosciuto il diritto al risarcimento dell'interesse positivo va posto nella situazione in cui si troverebbe se il contratto fosse stato regolarmente eseguito. Per quanto attiene poi alla lamentela concernente un'insufficiente allegazione del danno, essa pare dimenticare che la Corte cantonale ha ritenuto la censura irricevibile in ragione della sua carente motivazione e omette di impugnare tale considerazione. Ne segue che il ricorso si rivela inammissibile su questo punto (<ref-ruling> consid. 2.4; <ref-ruling> consid. 3.4). Poiché il danno è stato validamente allegato, la ricorrente non può nemmeno essere seguita quando afferma che non avrebbe dovuto contestarlo, perché sostanziato in modo carente. Altrettanto infondata si palesa l'argomentazione secondo cui essa avrebbe, contrariamente a quanto indicato nella sentenza impugnata, sufficientemente contestato le allegazioni dell'opponente. Non è segnatamente esatto che avrebbe menzionato a pag. 53 della risposta innanzi al Pretore "vari fattori di riduzione", poiché nel passo indicato essa si era unicamente diffusa in generiche considerazioni sull'obbligo di ridurre il danno. In queste circostanze la Corte cantonale non ha nemmeno violato il diritto federale accordando all'opponente quanto chiesto, atteso che la ricorrente, gravata dal relativo onere della prova, non aveva nemmeno tentato di dimostrare eventuali risparmi da dedurre dal danno di cui l'opponente si era prevalsa.
7.
Infine, la ricorrente afferma di essere costretta a ricorrere anche contro il dispositivo concernente l'appello incidentale per correggere la suddivisione delle spese processuali e delle ripetibili contenuta nella sentenza impugnata per tale rimedio. Sostiene che la Corte cantonale non avrebbe dovuto considerare ingiustificata la pretesa di fr. 102'600.-- (che era invece stata riconosciuta dal Pretore per i costi di controllo e riassetto delle apparecchiature) nell'ambito dell'appello principale, ma accogliere parzialmente l'appello incidentale e ripartire di conseguenza le spese di giudiziarie di tale impugnativa
In concreto l'argomentazione ricorsuale non soddisfa le esigenze di motivazione poste dall'<ref-law>. Quando è confrontato con una richiesta di risarcimento danni composta da più voci, il tribunale adito è unicamente vincolato dal montante totale domandato dal danneggiato e può modificare gli importi attribuiti sulla base delle singole posizioni (sentenza 4A_428/2018 del 29 agosto 2019 consid. 4.2.2; <ref-ruling> consid. 6d). Ciononostante la ricorrente non spende una parola per spiegare perché sarebbe stato contrario al diritto federale operare la riduzione dell'importo riconosciuto all'attrice nell'ambito dell'appello principale.
8.
Da quanto precede discende che il ricorso si rivela infondato nella misura in cui è ammissibile. Le spese giudiziarie e le ripetibili seguono la soccombenza (art. 66 cpv. 1 e 68 cpv. 1 LTF).

Per questi motivi, il Tribunale federale pronuncia:
1.
Nella misura in cui è ammissibile, il ricorso è respinto.
2.
Le spese giudiziarie di fr. 25'000.-- sono poste a carico della ricorrente, che rifonderà all'opponente fr. 30'000.-- a titolo di ripetibili per la procedura innanzi al Tribunale federale.
3.
Comunicazione ai patrocinatori delle parti e alla II Camera civile del Tribunale d'appello del Cantone Ticino.