| 1666 | } |
| 1667 | |
| 1668 | static CECPacket *GetStatsGraphs(const CECPacket *request) |
| 1669 | { |
| 1670 | CECPacket *response = NULL; |
| 1671 | |
| 1672 | switch (request->GetDetailLevel()) { |
| 1673 | case EC_DETAIL_WEB: |
| 1674 | case EC_DETAIL_FULL: { |
| 1675 | double dTimestamp = 0.0; |
| 1676 | if (request->GetTagByName(EC_TAG_STATSGRAPH_LAST) != NULL) { |
| 1677 | dTimestamp = request->GetTagByName(EC_TAG_STATSGRAPH_LAST)->GetDoubleData(); |
| 1678 | } |
| 1679 | uint16 nScale = request->GetTagByNameSafe(EC_TAG_STATSGRAPH_SCALE)->GetInt(); |
| 1680 | uint16 nMaxPoints = request->GetTagByNameSafe(EC_TAG_STATSGRAPH_WIDTH)->GetInt(); |
| 1681 | uint32 *graphData = NULL; |
| 1682 | uint32 *connData = NULL; |
| 1683 | uint64 sessionDl = 0, sessionUl = 0, sessionKad = 0; |
| 1684 | double sessionTimespan = 0.0; |
| 1685 | unsigned int numPoints = theApp->m_statistics->GetHistoryForGui( |
| 1686 | nMaxPoints, (double)nScale, &dTimestamp, &graphData, &connData, |
| 1687 | sessionDl, sessionUl, sessionKad, sessionTimespan); |
| 1688 | if (numPoints) { |
| 1689 | response = new CECPacket(EC_OP_STATSGRAPHS); |
| 1690 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_DATA, 4 * numPoints * sizeof(uint32), graphData)); |
| 1691 | // Per-point active uploads / active downloads. Older |
| 1692 | // amulegui builds simply ignore the unknown tag. |
| 1693 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_DATA_CONN, 2 * numPoints * sizeof(uint32), connData)); |
| 1694 | delete [] graphData; |
| 1695 | delete [] connData; |
| 1696 | // Latest session totals — let amulegui compute the same |
| 1697 | // kBytesReceived / sTimestamp session average monolithic |
| 1698 | // shows, instead of falling back to a GUI-local integral. |
| 1699 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_SESSION_DL, sessionDl)); |
| 1700 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_SESSION_UL, sessionUl)); |
| 1701 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_SESSION_KAD, sessionKad)); |
| 1702 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_SESSION_TIMESPAN, sessionTimespan)); |
| 1703 | response->AddTag(CECTag(EC_TAG_STATSGRAPH_LAST, dTimestamp)); |
| 1704 | } else { |
| 1705 | response = new CECPacket(EC_OP_FAILED); |
| 1706 | response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("No points for graph."))); |
| 1707 | } |
| 1708 | break; |
| 1709 | } |
| 1710 | case EC_DETAIL_INC_UPDATE: |
| 1711 | case EC_DETAIL_UPDATE: |
| 1712 | case EC_DETAIL_CMD: |
| 1713 | // No graphs |
| 1714 | response = new CECPacket(EC_OP_FAILED); |
| 1715 | response->AddTag(CECTag(EC_TAG_STRING, wxTRANSLATE("Your client is not configured for this detail level."))); |
| 1716 | break; |
| 1717 | } |
| 1718 | if (!response) { |
| 1719 | response = new CECPacket(EC_OP_FAILED); |
| 1720 | // Unknown reason |
| 1721 | } |
| 1722 | |
| 1723 | return response; |
| 1724 | } |
| 1725 |
no test coverage detected