Revert "feat: 把 A 端的 Session/KCP/视频/控制 都收口到一个本地 daemon 进程里,Django 和输入发送端都改成通过本机 UDS HTTP 去访问它,同时补齐了观测、性能和可用性上的几个关键问题。"
This reverts commit 2f2c2008e7.
This commit is contained in:
@@ -22,13 +22,6 @@ PyDoc_STRVAR(
|
||||
"current frame has already been consumed and is lost."
|
||||
);
|
||||
|
||||
PyDoc_STRVAR(
|
||||
PyOmniSession_kcp_metrics_doc,
|
||||
"kcp_metrics() -> dict\n"
|
||||
"\n"
|
||||
"Return a snapshot of low-level KCP metrics for the current session."
|
||||
);
|
||||
|
||||
static PyObject *PyOmniSession_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) {
|
||||
PyOmniSession *self;
|
||||
(void) args;
|
||||
@@ -288,67 +281,6 @@ static PyObject *PyOmniSession_stats(PyOmniSession *self, PyObject *Py_UNUSED(ig
|
||||
);
|
||||
}
|
||||
|
||||
static PyObject *PyOmniSession_kcp_metrics(PyOmniSession *self, PyObject *Py_UNUSED(ignored)) {
|
||||
omnisocket_session_kcp_metrics_t metrics;
|
||||
|
||||
memset(&metrics, 0, sizeof(metrics));
|
||||
if (omnisocket_session_kcp_metrics_snapshot(&self->session, &metrics) != 0) {
|
||||
return PyErr_SetFromErrno(PyExc_OSError);
|
||||
}
|
||||
|
||||
return Py_BuildValue(
|
||||
"{s:i,s:i,s:I,s:s,s:s,s:I,s:i,s:i,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K,s:K}",
|
||||
"connected",
|
||||
metrics.connected,
|
||||
"has_conv",
|
||||
metrics.has_conv,
|
||||
"conv",
|
||||
metrics.conv,
|
||||
"local_addr",
|
||||
metrics.local_addr,
|
||||
"remote_addr",
|
||||
metrics.remote_addr,
|
||||
"rto_ms",
|
||||
metrics.rto_ms,
|
||||
"srtt_ms",
|
||||
metrics.srtt_ms,
|
||||
"srttvar_ms",
|
||||
metrics.srttvar_ms,
|
||||
"bytes_sent",
|
||||
(unsigned long long) metrics.bytes_sent,
|
||||
"bytes_received",
|
||||
(unsigned long long) metrics.bytes_received,
|
||||
"in_pkts",
|
||||
(unsigned long long) metrics.in_pkts,
|
||||
"out_pkts",
|
||||
(unsigned long long) metrics.out_pkts,
|
||||
"in_segs",
|
||||
(unsigned long long) metrics.in_segs,
|
||||
"out_segs",
|
||||
(unsigned long long) metrics.out_segs,
|
||||
"retrans_segs",
|
||||
(unsigned long long) metrics.retrans_segs,
|
||||
"fast_retrans_segs",
|
||||
(unsigned long long) metrics.fast_retrans_segs,
|
||||
"early_retrans_segs",
|
||||
(unsigned long long) metrics.early_retrans_segs,
|
||||
"lost_segs",
|
||||
(unsigned long long) metrics.lost_segs,
|
||||
"repeat_segs",
|
||||
(unsigned long long) metrics.repeat_segs,
|
||||
"in_errs",
|
||||
(unsigned long long) metrics.in_errs,
|
||||
"kcp_in_errs",
|
||||
(unsigned long long) metrics.kcp_in_errs,
|
||||
"ring_buffer_snd_queue",
|
||||
(unsigned long long) metrics.ring_buffer_snd_queue,
|
||||
"ring_buffer_rcv_queue",
|
||||
(unsigned long long) metrics.ring_buffer_rcv_queue,
|
||||
"ring_buffer_snd_buffer",
|
||||
(unsigned long long) metrics.ring_buffer_snd_buffer
|
||||
);
|
||||
}
|
||||
|
||||
static PyMethodDef PyOmniSession_methods[] = {
|
||||
{"connect", (PyCFunction) PyOmniSession_connect, METH_VARARGS | METH_KEYWORDS, NULL},
|
||||
{"close", (PyCFunction) PyOmniSession_close, METH_NOARGS, NULL},
|
||||
@@ -356,7 +288,6 @@ static PyMethodDef PyOmniSession_methods[] = {
|
||||
{"recv", (PyCFunction) PyOmniSession_recv, METH_VARARGS | METH_KEYWORDS, PyOmniSession_recv_doc},
|
||||
{"recv_into", (PyCFunction) PyOmniSession_recv_into, METH_VARARGS | METH_KEYWORDS, PyOmniSession_recv_into_doc},
|
||||
{"stats", (PyCFunction) PyOmniSession_stats, METH_NOARGS, NULL},
|
||||
{"kcp_metrics", (PyCFunction) PyOmniSession_kcp_metrics, METH_NOARGS, PyOmniSession_kcp_metrics_doc},
|
||||
{NULL, NULL, 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
@@ -246,72 +246,3 @@ void omnisocket_session_stats_snapshot(omnisocket_session_t *session, omnisocket
|
||||
*out_stats = session->stats;
|
||||
pthread_mutex_unlock(&session->mutex);
|
||||
}
|
||||
|
||||
int omnisocket_session_kcp_metrics_snapshot(
|
||||
omnisocket_session_t *session,
|
||||
omnisocket_session_kcp_metrics_t *out_metrics
|
||||
) {
|
||||
kcp_client_t *client = NULL;
|
||||
kcp_conn_metrics_t metrics;
|
||||
int rc = 0;
|
||||
|
||||
if (session == NULL || out_metrics == NULL) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(out_metrics, 0, sizeof(*out_metrics));
|
||||
|
||||
pthread_mutex_lock(&session->mutex);
|
||||
if (session->client != NULL && !session->closing) {
|
||||
client = session->client;
|
||||
session->active_ops += 1;
|
||||
}
|
||||
pthread_mutex_unlock(&session->mutex);
|
||||
|
||||
if (client == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
memset(&metrics, 0, sizeof(metrics));
|
||||
rc = kcp_client_metrics_snapshot(client, &metrics);
|
||||
|
||||
pthread_mutex_lock(&session->mutex);
|
||||
if (session->active_ops > 0) {
|
||||
session->active_ops -= 1;
|
||||
}
|
||||
if (session->closing && session->active_ops == 0) {
|
||||
pthread_cond_broadcast(&session->idle_cond);
|
||||
}
|
||||
pthread_mutex_unlock(&session->mutex);
|
||||
|
||||
if (rc != 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
out_metrics->connected = metrics.connected;
|
||||
out_metrics->has_conv = metrics.has_conv;
|
||||
out_metrics->conv = metrics.conv;
|
||||
snprintf(out_metrics->local_addr, sizeof(out_metrics->local_addr), "%s", metrics.local_addr);
|
||||
snprintf(out_metrics->remote_addr, sizeof(out_metrics->remote_addr), "%s", metrics.remote_addr);
|
||||
out_metrics->rto_ms = metrics.rto_ms;
|
||||
out_metrics->srtt_ms = metrics.srtt_ms;
|
||||
out_metrics->srttvar_ms = metrics.srttvar_ms;
|
||||
out_metrics->bytes_sent = metrics.bytes_sent;
|
||||
out_metrics->bytes_received = metrics.bytes_received;
|
||||
out_metrics->in_pkts = metrics.in_pkts;
|
||||
out_metrics->out_pkts = metrics.out_pkts;
|
||||
out_metrics->in_segs = metrics.in_segs;
|
||||
out_metrics->out_segs = metrics.out_segs;
|
||||
out_metrics->retrans_segs = metrics.retrans_segs;
|
||||
out_metrics->fast_retrans_segs = metrics.fast_retrans_segs;
|
||||
out_metrics->early_retrans_segs = metrics.early_retrans_segs;
|
||||
out_metrics->lost_segs = metrics.lost_segs;
|
||||
out_metrics->repeat_segs = metrics.repeat_segs;
|
||||
out_metrics->in_errs = metrics.in_errs;
|
||||
out_metrics->kcp_in_errs = metrics.kcp_in_errs;
|
||||
out_metrics->ring_buffer_snd_queue = metrics.ring_buffer_snd_queue;
|
||||
out_metrics->ring_buffer_rcv_queue = metrics.ring_buffer_rcv_queue;
|
||||
out_metrics->ring_buffer_snd_buffer = metrics.ring_buffer_snd_buffer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -14,33 +14,6 @@ typedef struct omnisocket_session_stats {
|
||||
int connected;
|
||||
} omnisocket_session_stats_t;
|
||||
|
||||
typedef struct omnisocket_session_kcp_metrics {
|
||||
int connected;
|
||||
int has_conv;
|
||||
uint32_t conv;
|
||||
char local_addr[OMNI_MAX_ADDR_TEXT];
|
||||
char remote_addr[OMNI_MAX_ADDR_TEXT];
|
||||
uint32_t rto_ms;
|
||||
int32_t srtt_ms;
|
||||
int32_t srttvar_ms;
|
||||
uint64_t bytes_sent;
|
||||
uint64_t bytes_received;
|
||||
uint64_t in_pkts;
|
||||
uint64_t out_pkts;
|
||||
uint64_t in_segs;
|
||||
uint64_t out_segs;
|
||||
uint64_t retrans_segs;
|
||||
uint64_t fast_retrans_segs;
|
||||
uint64_t early_retrans_segs;
|
||||
uint64_t lost_segs;
|
||||
uint64_t repeat_segs;
|
||||
uint64_t in_errs;
|
||||
uint64_t kcp_in_errs;
|
||||
uint64_t ring_buffer_snd_queue;
|
||||
uint64_t ring_buffer_rcv_queue;
|
||||
uint64_t ring_buffer_snd_buffer;
|
||||
} omnisocket_session_kcp_metrics_t;
|
||||
|
||||
typedef struct omnisocket_session {
|
||||
pthread_mutex_t mutex;
|
||||
pthread_cond_t idle_cond;
|
||||
@@ -74,9 +47,5 @@ int omnisocket_session_recv_into(
|
||||
int timeout_ms
|
||||
);
|
||||
void omnisocket_session_stats_snapshot(omnisocket_session_t *session, omnisocket_session_stats_t *out_stats);
|
||||
int omnisocket_session_kcp_metrics_snapshot(
|
||||
omnisocket_session_t *session,
|
||||
omnisocket_session_kcp_metrics_t *out_metrics
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user