int SrsApiConfigsLogs::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
{
    int ret = ERROR_SUCCESS;
    
    // HTTP GET
    if (req->is_http_get()) {
        std::stringstream ss;
        ss << JOBJECT_START
            << JFIELD_ERROR(ERROR_SUCCESS) << JFIELD_CONT
            << JFIELD_ORG("data", JOBJECT_START)
                << JFIELD_STR("tank", (_srs_config->get_log_tank_file()? "file":"console")) << JFIELD_CONT
                << JFIELD_STR("level", _srs_config->get_log_level()) << JFIELD_CONT
                << JFIELD_STR("cwd", _srs_config->cwd()) << JFIELD_CONT
                << JFIELD_STR("file", _srs_config->get_log_file())
            << JOBJECT_END
            << JOBJECT_END;
        
        return res_json(skt, req, ss.str());
    }
    
    // HTTP PUT
    srs_trace("http api PUT logs, req is: %s", req->body().c_str());
    
    SrsJsonAny* json = SrsJsonAny::loads(req->body_raw());
    SrsAutoFree(SrsJsonAny, json);
    
    if (!json) {
        return response_error(skt, req, ERROR_HTTP_API_LOGS, "invalid PUT json");
    } else if (!json->is_object()) {
        return response_error(skt, req, ERROR_HTTP_API_LOGS, "invalid PUT json logs params");
    }
    
    SrsJsonObject* o = json->to_object();
    SrsJsonAny* prop = NULL;
    if ((prop = o->ensure_property_string("file")) != NULL && _srs_config->set_log_file(prop->to_str())) {
        if ((ret = _srs_config->force_reload_log_file()) != ERROR_SUCCESS) {
            return response_error(skt, req, ret, "reload log file failed");
        }
        srs_warn("http api reload log file to %s", prop->to_str().c_str());
    }
    if ((prop = o->ensure_property_string("tank")) != NULL && _srs_config->set_log_tank(prop->to_str())) {
        if ((ret = _srs_config->force_reload_log_tank()) != ERROR_SUCCESS) {
            return response_error(skt, req, ret, "reload log tank failed");
        }
        srs_warn("http api reload log tank to %s", prop->to_str().c_str());
    }
    if ((prop = o->ensure_property_string("level")) != NULL && _srs_config->set_log_level(prop->to_str())) {
        if ((ret = _srs_config->force_reload_log_level()) != ERROR_SUCCESS) {
            return response_error(skt, req, ret, "reload log level failed");
        }
        srs_warn("http api reload log level to %s", prop->to_str().c_str());
    }
    
    return response_error(skt, req, ret, "PUT logs success.");
}
예제 #2
0
int SrsKafkaProducer::on_close(int key)
{
    int ret = ERROR_SUCCESS;
    
    if (!enabled) {
        return ret;
    }
    
    SrsJsonObject* obj = SrsJsonAny::object();
    
    obj->set("msg", SrsJsonAny::str("close"));
    
    return worker->execute(new SrsKafkaMessage(this, key, obj));
}
예제 #3
0
int SrsKafkaProducer::on_client(int key, SrsListenerType type, string ip)
{
    int ret = ERROR_SUCCESS;
    
    if (!enabled) {
        return ret;
    }
    
    SrsJsonObject* obj = SrsJsonAny::object();
    
    obj->set("msg", SrsJsonAny::str("accept"));
    obj->set("type", SrsJsonAny::integer(type));
    obj->set("ip", SrsJsonAny::str(ip.c_str()));
    
    return worker->execute(new SrsKafkaMessage(this, key, obj));
}
예제 #4
0
SrsJsonAny* srs_json_parse_tree_nx_json(const nx_json* node)
{
    if (!node) {
        return NULL;
    }
    
    switch (node->type) {
        case NX_JSON_NULL:
            return SrsJsonAny::null();
        case NX_JSON_STRING:
            return SrsJsonAny::str(node->text_value);
        case NX_JSON_INTEGER:
            return SrsJsonAny::ingeter(node->int_value);
        case NX_JSON_DOUBLE:
            return SrsJsonAny::number(node->dbl_value);
        case NX_JSON_BOOL:
            return SrsJsonAny::boolean(node->int_value != 0);
        case NX_JSON_OBJECT: {
            SrsJsonObject* obj = SrsJsonAny::object();
            for (nx_json* p = node->child; p != NULL; p = p->next) {
                SrsJsonAny* value = srs_json_parse_tree_nx_json(p);
                if (value) {
                    obj->set(p->key, value);
                }
            }
            return obj;
        }
        case NX_JSON_ARRAY: {
            SrsJsonArray* arr = SrsJsonAny::array();
            for (nx_json* p = node->child; p != NULL; p = p->next) {
                SrsJsonAny* value = srs_json_parse_tree_nx_json(p);
                if (value) {
                    arr->add(value);
                }
            }
            return arr;
        }
    }
    
    return NULL;
}