Exemplo n.º 1
0
static VALUE rb_sigar_net_stat_get(VALUE obj, VALUE flags, VALUE bytes, int port)
{
    int status;
    int has_port = (port != -1);
    sigar_t *sigar = rb_sigar_get(obj);
    sigar_net_stat_t *RETVAL = malloc(sizeof(*RETVAL));
    sigar_net_address_t address;

    if (has_port) {
        status = rb_sigar_str2net_address(bytes, &address);
        if (status == SIGAR_OK) {
            status = sigar_net_stat_port_get(sigar, RETVAL, NUM2INT(flags),
                                             &address, port);
        }
    }
    else {
        status = sigar_net_stat_get(sigar, RETVAL, NUM2INT(flags));
    }

    if (status != SIGAR_OK) {
        free(RETVAL);
        RB_SIGAR_CROAK;
    }

    return Data_Wrap_Struct(rb_cSigarNetStat, 0, rb_sigar_free, RETVAL);
}
JNIEXPORT void SIGAR_JNI(NetStat_stat)
(JNIEnv *env, jobject obj, jobject sigar_obj, jint flags,
 jbyteArray jaddress, jlong port)
{
    int status;
    sigar_net_stat_t netstat;
    jclass cls;
    jfieldID id;
    jintArray states;
    jint tcp_states[SIGAR_TCP_UNKNOWN];
    sigar_net_address_t address;
    jboolean has_port = (port != -1);
    dSIGAR_VOID;

    if (has_port) {
        status = jbyteArray_to_sigar_net_address(env, jaddress, &address);
        if (status == SIGAR_OK) {
            status = sigar_net_stat_port_get(sigar, &netstat, flags,
                                             &address, port);
        }
    }
    else {
        status = sigar_net_stat_get(sigar, &netstat, flags);
    }

    if (status != SIGAR_OK) {
        sigar_throw_error(env, jsigar, status);
        return;
    }

    cls = JENV->GetObjectClass(env, obj);

    JAVA_SIGAR_INIT_FIELDS_NETSTAT(cls);
    JAVA_SIGAR_SET_FIELDS_NETSTAT(cls, obj, netstat);

    if (sizeof(tcp_states[0]) == sizeof(netstat.tcp_states[0])) {
        memcpy(&tcp_states[0], &netstat.tcp_states[0],
               sizeof(netstat.tcp_states));
    }
    else {
        int i;
        for (i=0; i<SIGAR_TCP_UNKNOWN; i++) {
            tcp_states[i] = netstat.tcp_states[i];
        }
    }

    states = JENV->NewIntArray(env, SIGAR_TCP_UNKNOWN);
    if (JENV->ExceptionCheck(env)) {
        return;
    }

    JENV->SetIntArrayRegion(env, states, 0,
                            SIGAR_TCP_UNKNOWN,
                            tcp_states);

    id = JENV->GetFieldID(env, cls, "tcpStates", "[I");
    JENV->SetObjectField(env, obj, id, states);
}
Exemplo n.º 3
0
NetStat::NetStat(QString ifname)
{    
    int status;
    QString tmp;
    sigar_t *sigar;
    sigar_net_stat_t s;
    sigar_net_interface_stat_t curr, curr2;

    sigar_open(&sigar);
    status = sigar_net_stat_get(sigar, &s, DEFAULT_NET_STAT_FLAGS);


    if (status != SIGAR_OK) {
        printf("get net start info error: %d (%s)\n",
               status, sigar_strerror(sigar, status));
        exit(1);
    }

/*
    s.all_inbound_total;
    s.all_outbound_total;
    s.tcp_inbound_total;
    s.tcp_outbound_total;
    s.tcp_states;*/



    tcp_established = s.tcp_states[SIGAR_TCP_ESTABLISHED];
    tcp_listen = s.tcp_states[SIGAR_TCP_LISTEN];
    tcp_time_wait = s.tcp_states[SIGAR_TCP_TIME_WAIT];
    tcp_close_wait = s.tcp_states[SIGAR_TCP_CLOSE_WAIT];
    tcp_idle = s.tcp_states[SIGAR_TCP_IDLE];


    status = sigar_net_interface_stat_get(sigar, ifname.toAscii(), &curr);
    if (status != SIGAR_OK) {
        printf("get stat net info error: %d (%s)\n",
               status, sigar_strerror(sigar, status));
        exit(1);
    }

    // printf("curr_net_stat: rx_bytes=%llu, tx_bytes=%llu \n", (Llu)curr.rx_bytes, (Llu)curr.tx_bytes);


    m_time.start();
    //poll(0, 0, DEFAULT_PAUSE);
     QTest::qSleep(1000);
    status = sigar_net_interface_stat_get(sigar, ifname.toAscii(), &curr2);
    if (status != SIGAR_OK) {
        printf("get stat net info error: %d (%s)\n",
               status, sigar_strerror(sigar, status));
        exit(1);
    }
    int elapsed = m_time.elapsed();


    //rx_bytes.setNum(curr.rx_bytes, 10);
    //tx_bytes.setNum(curr.tx_bytes, 10);

    //double tmp = (curr2.rx_bytes - curr.rx_bytes) / KiB;

    //qDebug() << "rx tmp " << tmp;

    rx_rate.setNum(((curr2.rx_bytes - curr.rx_bytes) / KiB), 'g');

    //rx_rate = (curr2.rx_bytes - curr.rx_bytes) / KiB;

    //tmp = "";


    //tmp = (curr2.tx_bytes - curr.tx_bytes) / KiB;
    //qDebug() << "tx tmp " << tmp;
    tx_rate.setNum(((curr2.tx_bytes - curr.tx_bytes) / KiB), 'g');

    //tx_rate = (curr2.tx_bytes - curr.tx_bytes) / KiB;

    //tmp = "";


    qDebug() << "tx2 rate : " << curr2.tx_bytes << " tx rate : " << curr.tx_bytes << " rate : " << (curr2.tx_bytes - curr.tx_bytes) / KiB;

    sigar_close(sigar);
}