| 1531 | |
| 1532 | |
| 1533 | void Monitoring::dumpAttachment(thread_db* tdbb, Attachment* attachment, ULONG generation) |
| 1534 | { |
| 1535 | if (!attachment->att_user) |
| 1536 | return; |
| 1537 | |
| 1538 | const auto dbb = tdbb->getDatabase(); |
| 1539 | auto& pool = *dbb->dbb_permanent; |
| 1540 | |
| 1541 | attachment->mergeStats(); |
| 1542 | |
| 1543 | const auto attId = attachment->att_attachment_id; |
| 1544 | const auto userName = attachment->getUserName(); |
| 1545 | |
| 1546 | fb_assert(dbb->dbb_monitoring_data); |
| 1547 | |
| 1548 | attachment->att_monitor_generation = generation; |
| 1549 | |
| 1550 | MonitoringData::Guard guard(dbb->dbb_monitoring_data); |
| 1551 | dbb->dbb_monitoring_data->cleanup(attId); |
| 1552 | |
| 1553 | DumpWriter writer(dbb->dbb_monitoring_data, attId, userName.c_str(), generation); |
| 1554 | SnapshotData::DumpRecord record(pool, writer); |
| 1555 | |
| 1556 | putAttachment(record, attachment); |
| 1557 | |
| 1558 | jrd_tra* transaction = nullptr; |
| 1559 | |
| 1560 | // Transaction information |
| 1561 | |
| 1562 | for (transaction = attachment->att_transactions; transaction; |
| 1563 | transaction = transaction->tra_next) |
| 1564 | { |
| 1565 | putTransaction(record, transaction); |
| 1566 | } |
| 1567 | |
| 1568 | // Call stack information |
| 1569 | |
| 1570 | for (transaction = attachment->att_transactions; transaction; |
| 1571 | transaction = transaction->tra_next) |
| 1572 | { |
| 1573 | for (Request* request = transaction->tra_requests; |
| 1574 | request && (request->req_flags & req_active) && (request->req_transaction == transaction); |
| 1575 | request = request->req_caller) |
| 1576 | { |
| 1577 | request->adjustCallerStats(); |
| 1578 | |
| 1579 | if (!(request->getStatement()->flags & |
| 1580 | (Statement::FLAG_INTERNAL | Statement::FLAG_SYS_TRIGGER)) && |
| 1581 | request->req_caller) |
| 1582 | { |
| 1583 | putCall(record, request); |
| 1584 | } |
| 1585 | } |
| 1586 | } |
| 1587 | |
| 1588 | if (dbb->getEncodedOdsVersion() >= ODS_13_1) |
| 1589 | { |
| 1590 | // Statement information, must be put into dump before requests |
nothing calls this directly
no test coverage detected