[{"data":1,"prerenderedAt":638},["ShallowReactive",2],{"docs-pages-it":3,"doc-it-node-database":155},[4,11,16,21,26,31,37,48,56,65,73,81,89,93,102,106,114,119,124,129,135,140,145,150],{"path":5,"title":6,"description":7,"order":8,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Finstallation","Installazione","Installa CloseYourIt sul tuo server con un solo comando.",1,"start",null,{"path":12,"title":13,"description":14,"order":15,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fsettings","Impostazioni","Ogni impostazione del file .env, a cosa serve e quali non vanno mai cambiate.",2,{"path":17,"title":18,"description":19,"order":20,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fdatabase","Database","Cos'è il database, cosa contiene, quanto restano i dati e quanto spazio occupa.",3,{"path":22,"title":23,"description":24,"order":25,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fupdates-and-backups","Aggiornamenti e backup","Aggiorna a una versione nuova, fai e ripristina il backup del database, controlla l'installazione.",4,{"path":27,"title":28,"description":29,"order":30,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Ftroubleshooting","Risolvere i problemi","Cosa controllare quando installazione, certificato, email o dati in arrivo non funzionano.",5,{"path":32,"title":33,"description":34,"order":35,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fconnect-your-apps","Collega le tue app","Tutti gli strumenti che mandano dati a CloseYourIt, e cosa raccoglie ognuno.",6,"connect",{"path":38,"title":39,"description":40,"order":41,"group":10,"parent":42,"package":43,"note":44,"collects":45,"status":10},"\u002Fdocs\u002Fsdk-ruby","Ruby \u002F Rails","La gemma closeyourit-ruby manda errori, log, query lente e metriche dei job da un'app Rails.",7,"connect-your-apps","closeyourit-ruby","Errori, log, query e metodi lenti, job in background.",{"errors":46,"logs":46,"performance":46,"visits":47,"servers":47},"full","none",{"path":49,"title":50,"description":51,"order":52,"group":10,"parent":42,"package":53,"note":54,"collects":55,"status":10},"\u002Fdocs\u002Fsdk-javascript","JavaScript","Il pacchetto @bussolabs\u002Fcloseyourit-js funziona nel browser e su Node 20.16 o più recente.",8,"@bussolabs\u002Fcloseyourit-js","Browser e Node, adattatori framework e query database dalla 0.13.0.",{"errors":46,"logs":46,"performance":46,"visits":46,"servers":47},{"path":57,"title":58,"description":59,"order":60,"group":10,"parent":42,"package":61,"note":62,"collects":63,"status":10},"\u002Fdocs\u002Fsdk-dart","Dart \u002F Flutter","Il pacchetto closeyourit cattura gli errori delle app Flutter, anche quando il telefono è senza rete.",9,"closeyourit","Errori, log e metriche pubblici dalla 0.9.3.",{"errors":46,"logs":64,"performance":64,"visits":47,"servers":47},"partial",{"path":66,"title":67,"description":68,"order":69,"group":10,"parent":42,"package":61,"note":70,"collects":71,"status":72},"\u002Fdocs\u002Fsdk-python","Python","Il pacchetto closeyourit manda errori, log e metriche da applicazioni Python lato server.",10,"Lato server. SQLAlchemy; query Django e FastAPI\u002FStarlette dalla 0.4.0.",{"errors":46,"logs":46,"performance":64,"visits":47,"servers":47},"pre_alpha",{"path":74,"title":75,"description":76,"order":77,"group":10,"parent":42,"package":78,"note":79,"collects":80,"status":10},"\u002Fdocs\u002Fsdk-sentry","SDK Sentry","Invia errori con un SDK Sentry compatibile; sessioni e crash hanno profili separati.",11,"Sentry SDK","Errori compatibili; sessioni e crash richiedono il profilo verificato.",{"errors":46,"logs":47,"performance":47,"visits":47,"servers":47},{"path":82,"title":83,"description":84,"order":85,"group":10,"parent":42,"package":86,"note":87,"collects":88,"status":10},"\u002Fdocs\u002Fagent-server","Agent per server","Un piccolo programma sul server che manda lo stato della macchina ogni 60 secondi.",12,"closeyourit-agent","CPU, memoria, dischi, rete, container e servizi.",{"errors":47,"logs":64,"performance":47,"visits":47,"servers":46},{"path":90,"title":91,"description":92,"order":85,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnuxt","Vue e Nuxt","Collega gli errori del browser Nuxt e del server Nitro senza esporre un token segreto.",{"path":94,"title":95,"description":96,"order":97,"group":10,"parent":42,"package":98,"note":99,"collects":100,"status":101},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","Un osservatore in sola lettura del cluster: una copia sola per cluster.",13,"closeyourit-kube","Macchine, app ed eventi di errore del cluster.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":46},"coming",{"path":103,"title":104,"description":105,"order":97,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Invia tracce, metriche e log dei server attraverso il ricevitore OTLP facoltativo.",{"path":107,"title":108,"description":109,"order":110,"group":10,"parent":42,"package":111,"note":112,"collects":113,"status":10},"\u002Fdocs\u002Fcli","CLI cyi","Il comando closeyourit, in breve cyi: gestisci progetti, errori e ticket dal terminale.",14,"@bussolabs\u002Fcloseyourit-cli","Non raccoglie dati: comanda CloseYourIt dal terminale.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":47},{"path":115,"title":116,"description":117,"order":118,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fhttp-api","API HTTP","Manda errori, log, metriche e visite con semplici richieste HTTP, senza un SDK.",15,{"path":120,"title":121,"description":122,"order":123,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fgithub-app","GitHub","Collega i repository GitHub a ticket e rilasci con una GitHub App tua.",16,{"path":125,"title":126,"description":127,"order":128,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fingest-gateway","Gateway di ingest","Tieni al sicuro errori, log e metriche in arrivo quando l'app è lenta o sta ripartendo.",17,{"path":130,"title":131,"description":132,"order":133,"group":134,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fai","AI","Accendi assistente, analisi, dettatura e ricerca intelligente con una chiave CloseYourIt AI o con il tuo provider.",18,"automation",{"path":136,"title":137,"description":138,"order":139,"group":134,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fautomator","Automator","Fai lavorare i ticket in automatico su una tua macchina Linux, con Claude Code, Codex o tutti e due.",19,{"path":141,"title":142,"description":143,"order":144,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fstack-coverage","Framework e copertura degli stack","Scegli un SDK pubblicato o verifica i limiti di un’integrazione provata localmente.",20,{"path":146,"title":147,"description":148,"order":149,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fmonitoring","Tracce, misure e sessioni","Esplora i nuovi segnali, confronta le versioni e ricostruisci le posizioni originali degli errori.",21,{"path":151,"title":152,"description":153,"order":154,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnode-database","Database Node","Monitora query lente e ripetute con pg, mysql2, Drizzle e Prisma PostgreSQL.",22,{"id":156,"title":152,"body":157,"collects":10,"description":153,"extension":633,"group":36,"meta":634,"navigation":250,"note":10,"order":154,"package":10,"parent":10,"path":151,"seo":635,"status":10,"stem":636,"__hash__":637},"docs_it\u002Fdocs\u002Fnode-database.md",{"type":158,"value":159,"toc":628},"minimark",[160,178,183,194,537,552,565,569,588,594,598,601,612,624],[161,162,163,164,168,169,173,174,177],"p",{},"Il modulo ",[165,166,167],"code",{},"\u002Fdatabase"," dell’SDK JavaScript ",[170,171,172],"strong",{},"0.13.0"," osserva istanze pg e mysql2 fornite dall’applicazione. Genera misure native ",[165,175,176],{},"slow_query"," e segnalazioni di query ripetute: non crea tracce OpenTelemetry. È disattivato per impostazione predefinita.",[179,180,182],"h2",{"id":181},"postgresql","PostgreSQL",[161,184,185,186,189,190,193],{},"Installa ",[165,187,188],{},"@bussolabs\u002Fcloseyourit-js@^0.13.0"," e il driver ",[165,191,192],{},"pg"," compatibile con la tua applicazione. Fornisci connessione e credenziali solo a runtime, lato server. Questo esempio esegue una query reale e chiude le risorse al termine; in un server, installa una volta all’avvio e chiudi allo spegnimento.",[195,196,201],"pre",{"className":197,"code":198,"language":199,"meta":200,"style":200},"language-ts shiki shiki-themes github-light github-dark","import pg from 'pg'\nimport { Client } from '@bussolabs\u002Fcloseyourit-js'\nimport { DatabaseMonitoring } from '@bussolabs\u002Fcloseyourit-js\u002Fdatabase'\n\nconst client = new Client({\n  endpointUrl: process.env.CLOSEYOURIT_ENDPOINT_URL!,\n  projectId: process.env.CLOSEYOURIT_PROJECT_ID!,\n  token: process.env.CLOSEYOURIT_TOKEN,\n  environment: process.env.NODE_ENV,\n  release: process.env.APP_VERSION,\n})\nconst pool = new pg.Pool()\nconst monitoring = new DatabaseMonitoring(client, {\n  enabled: true,\n  slowQueryThresholdMs: 100,\n  repeatedQueryThreshold: 5,\n})\nmonitoring.instrumentPostgres(pool)\n\nawait client.runWithScope(() =>\n  monitoring.profile(async () => {\n    await pool.query('SELECT $1::integer AS value', [1])\n  }),\n)\n\nmonitoring.uninstall()\nawait client.close()\nawait pool.end()\n","ts","",[165,202,203,222,234,246,252,274,288,300,310,320,330,335,355,372,382,392,402,406,417,421,438,461,486,492,498,503,513,525],{"__ignoreMap":200},[204,205,207,211,215,218],"span",{"class":206,"line":8},"line",[204,208,210],{"class":209},"szBVR","import",[204,212,214],{"class":213},"sVt8B"," pg ",[204,216,217],{"class":209},"from",[204,219,221],{"class":220},"sZZnC"," 'pg'\n",[204,223,224,226,229,231],{"class":206,"line":15},[204,225,210],{"class":209},[204,227,228],{"class":213}," { Client } ",[204,230,217],{"class":209},[204,232,233],{"class":220}," '@bussolabs\u002Fcloseyourit-js'\n",[204,235,236,238,241,243],{"class":206,"line":20},[204,237,210],{"class":209},[204,239,240],{"class":213}," { DatabaseMonitoring } ",[204,242,217],{"class":209},[204,244,245],{"class":220}," '@bussolabs\u002Fcloseyourit-js\u002Fdatabase'\n",[204,247,248],{"class":206,"line":25},[204,249,251],{"emptyLinePlaceholder":250},true,"\n",[204,253,254,257,261,264,267,271],{"class":206,"line":30},[204,255,256],{"class":209},"const",[204,258,260],{"class":259},"sj4cs"," client",[204,262,263],{"class":209}," =",[204,265,266],{"class":209}," new",[204,268,270],{"class":269},"sScJk"," Client",[204,272,273],{"class":213},"({\n",[204,275,276,279,282,285],{"class":206,"line":35},[204,277,278],{"class":213},"  endpointUrl: process.env.",[204,280,281],{"class":259},"CLOSEYOURIT_ENDPOINT_URL",[204,283,284],{"class":209},"!",[204,286,287],{"class":213},",\n",[204,289,290,293,296,298],{"class":206,"line":41},[204,291,292],{"class":213},"  projectId: process.env.",[204,294,295],{"class":259},"CLOSEYOURIT_PROJECT_ID",[204,297,284],{"class":209},[204,299,287],{"class":213},[204,301,302,305,308],{"class":206,"line":52},[204,303,304],{"class":213},"  token: process.env.",[204,306,307],{"class":259},"CLOSEYOURIT_TOKEN",[204,309,287],{"class":213},[204,311,312,315,318],{"class":206,"line":60},[204,313,314],{"class":213},"  environment: process.env.",[204,316,317],{"class":259},"NODE_ENV",[204,319,287],{"class":213},[204,321,322,325,328],{"class":206,"line":69},[204,323,324],{"class":213},"  release: process.env.",[204,326,327],{"class":259},"APP_VERSION",[204,329,287],{"class":213},[204,331,332],{"class":206,"line":77},[204,333,334],{"class":213},"})\n",[204,336,337,339,342,344,346,349,352],{"class":206,"line":85},[204,338,256],{"class":209},[204,340,341],{"class":259}," pool",[204,343,263],{"class":209},[204,345,266],{"class":209},[204,347,348],{"class":213}," pg.",[204,350,351],{"class":269},"Pool",[204,353,354],{"class":213},"()\n",[204,356,357,359,362,364,366,369],{"class":206,"line":97},[204,358,256],{"class":209},[204,360,361],{"class":259}," monitoring",[204,363,263],{"class":209},[204,365,266],{"class":209},[204,367,368],{"class":269}," DatabaseMonitoring",[204,370,371],{"class":213},"(client, {\n",[204,373,374,377,380],{"class":206,"line":110},[204,375,376],{"class":213},"  enabled: ",[204,378,379],{"class":259},"true",[204,381,287],{"class":213},[204,383,384,387,390],{"class":206,"line":118},[204,385,386],{"class":213},"  slowQueryThresholdMs: ",[204,388,389],{"class":259},"100",[204,391,287],{"class":213},[204,393,394,397,400],{"class":206,"line":123},[204,395,396],{"class":213},"  repeatedQueryThreshold: ",[204,398,399],{"class":259},"5",[204,401,287],{"class":213},[204,403,404],{"class":206,"line":128},[204,405,334],{"class":213},[204,407,408,411,414],{"class":206,"line":133},[204,409,410],{"class":213},"monitoring.",[204,412,413],{"class":269},"instrumentPostgres",[204,415,416],{"class":213},"(pool)\n",[204,418,419],{"class":206,"line":139},[204,420,251],{"emptyLinePlaceholder":250},[204,422,423,426,429,432,435],{"class":206,"line":144},[204,424,425],{"class":209},"await",[204,427,428],{"class":213}," client.",[204,430,431],{"class":269},"runWithScope",[204,433,434],{"class":213},"(() ",[204,436,437],{"class":209},"=>\n",[204,439,440,443,446,449,452,455,458],{"class":206,"line":149},[204,441,442],{"class":213},"  monitoring.",[204,444,445],{"class":269},"profile",[204,447,448],{"class":213},"(",[204,450,451],{"class":209},"async",[204,453,454],{"class":213}," () ",[204,456,457],{"class":209},"=>",[204,459,460],{"class":213}," {\n",[204,462,463,466,469,472,474,477,480,483],{"class":206,"line":154},[204,464,465],{"class":209},"    await",[204,467,468],{"class":213}," pool.",[204,470,471],{"class":269},"query",[204,473,448],{"class":213},[204,475,476],{"class":220},"'SELECT $1::integer AS value'",[204,478,479],{"class":213},", [",[204,481,482],{"class":259},"1",[204,484,485],{"class":213},"])\n",[204,487,489],{"class":206,"line":488},23,[204,490,491],{"class":213},"  }),\n",[204,493,495],{"class":206,"line":494},24,[204,496,497],{"class":213},")\n",[204,499,501],{"class":206,"line":500},25,[204,502,251],{"emptyLinePlaceholder":250},[204,504,506,508,511],{"class":206,"line":505},26,[204,507,410],{"class":213},[204,509,510],{"class":269},"uninstall",[204,512,354],{"class":213},[204,514,516,518,520,523],{"class":206,"line":515},27,[204,517,425],{"class":209},[204,519,428],{"class":213},[204,521,522],{"class":269},"close",[204,524,354],{"class":213},[204,526,528,530,532,535],{"class":206,"line":527},28,[204,529,425],{"class":209},[204,531,468],{"class":213},[204,533,534],{"class":269},"end",[204,536,354],{"class":213},[161,538,539,540,543,544,547,548,551],{},"Le soglie predefinite sono ",[170,541,542],{},"100 ms"," e ",[170,545,546],{},"cinque ripetizioni",". La query dell’esempio non produce necessariamente una misura: deve superare la soglia. Per una verifica controllata usa ",[165,549,550],{},"slowQueryThresholdMs: 0",", poi controlla il dato memorizzato nel progetto corretto.",[161,553,554,557,558,561,562,564],{},[165,555,556],{},"profile()"," delimita una richiesta: le richieste concorrenti non condividono i conteggi. Le query fuori dal profilo possono produrre misure di lentezza, ma non un conteggio di ripetizioni. Per richieste HTTP a callback o streaming usa ",[165,559,560],{},"monitoring.request(end => …)"," e chiama ",[165,563,534],{}," alla conclusione della risposta. Le query database in streaming restano escluse.",[179,566,568],{"id":567},"mysql-e-orm","MySQL e ORM",[161,570,571,572,575,576,579,580,583,584,587],{},"Per un pool ",[165,573,574],{},"mysql2\u002Fpromise",", chiama ",[165,577,578],{},"monitoring.instrumentMysql(pool, 'promise')","; per le API callback, usa ",[165,581,582],{},"'callback'",". Con Drizzle strumenta lo stesso pool pg\u002Fmysql2 passato all’ORM. Con Prisma 7 strumenta il pool PostgreSQL esplicito passato a ",[165,585,586],{},"PrismaPg",".",[161,589,590,593],{},[170,591,592],{},"Prisma MySQL, motori interni, cursori e oggetti query personalizzati non sono coperti."," Le query fisiche vengono contate una volta al confine del driver. Una ripetizione è un indizio, non la dimostrazione di un problema N+1 semantico.",[179,595,597],{"id":596},"privacy-limiti-e-rimozione","Privacy, limiti e rimozione",[161,599,600],{},"Valori dei parametri e risultati non vengono inviati. Gli identificatori SQL sono pseudonimizzati; questo non garantisce anonimato contro tentativi di indovinare i nomi. La sintassi non riconosciuta viene omessa senza cambiare la query dell’applicazione.",[161,602,603,604,607,608,611],{},"I limiti sono ",[170,605,606],{},"256 istanze, 64 profili simultanei, 64 gruppi e 1.000 operazioni per profilo",". Un profilo incompleto non genera un verdetto aggregato. ",[165,609,610],{},"monitoring.getStats()"," espone le omissioni locali. Il trasporto non aggiunge una coda offline persistente o nuovi tentativi automatici.",[161,613,614,617,618,623],{},[165,615,616],{},"uninstall()"," ripristina solo i metodi ancora posseduti dall’adattatore. Pool, transazioni e client SDK restano dell’applicazione. Verifica anche disattivazione e rimozione; consulta le ",[619,620,622],"a",{"href":621},"\u002Fit\u002Fdocs\u002Fstack-coverage","combinazioni osservate"," prima di estendere il supporto ad altri runtime.",[625,626,627],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":200,"searchDepth":15,"depth":15,"links":629},[630,631,632],{"id":181,"depth":15,"text":182},{"id":567,"depth":15,"text":568},{"id":596,"depth":15,"text":597},"md",{},{"title":152,"description":153},"docs\u002Fnode-database","NKjlsRIU-h2mfpkMAkdpBDBcXbQVOJbiWpXUJZdKdtY",1791302513751]