Example #1
0
    const std::string WiredTigerEngine::Stats()
    {
        std::string info;
        int major_v, minor_v, patch;
        (void) wiredtiger_version(&major_v, &minor_v, &patch);
        info.append("WiredTiger version:").append(stringfromll(major_v)).append(".").append(stringfromll(minor_v)).append(
                ".").append(stringfromll(patch)).append("\r\n");
        info.append("WiredTiger Init Options:").append(m_cfg.init_options).append("\r\n");
        info.append("WiredTiger Table Init Options:").append(m_cfg.init_table_options).append("\r\n");

        ContextHolder& holder = m_context.GetValue();
        WT_SESSION* session = holder.session;
        if (NULL == session)
        {
            return info;
        }
        WT_CURSOR *cursor;
        int ret;

        /*! [statistics database function] */
        if ((ret = session->open_cursor(session, "statistics:", NULL, NULL, &cursor)) == 0)
        {
            print_cursor(cursor, info);
            cursor->close(cursor);
        }
        if ((ret = session->open_cursor(session, "statistics:table:ardb", NULL, NULL, &cursor)) == 0)
        {
            print_cursor(cursor, info);
            cursor->close(cursor);
        }
        return info;

    }
Example #2
0
    const std::string LevelDBEngine::Stats()
    {
        std::string str, version_info;
        version_info.append("LevelDB version:").append(stringfromll(leveldb::kMajorVersion)).append(".").append(
                stringfromll(leveldb::kMinorVersion)).append("\r\n");
        m_db->GetProperty("leveldb.stats", &str);

        return version_info + str;
    }
Example #3
0
 void PerconaFTEngine::Stats(Context& ctx, std::string& str)
 {
     str.append("perconaft_version:").append(stringfromll(DB_VERSION_MAJOR)).append(".").append(stringfromll(DB_VERSION_MINOR)).append(".").append(
             stringfromll(DB_VERSION_PATCH)).append("\r\n");
     DataArray nss;
     ListNameSpaces(ctx, nss);
     PerconaFTLocalContext& local_ctx = g_local_ctx.GetValue();
     for (size_t i = 0; i < nss.size(); i++)
     {
         DB* db = GetFTDB(ctx, nss[i], false);
         if (NULL == db)
             continue;
         str.append("\r\nDB[").append(nss[i].AsString()).append("] Stats:\r\n");
         DB_BTREE_STAT64 st;
         memset(&st, 0, sizeof(st));
         db->stat64(db, local_ctx.transc.Peek(), &st);
         str.append("bt_nkeys:").append(stringfromll(st.bt_nkeys)).append("\r\n");
         str.append("bt_ndata:").append(stringfromll(st.bt_ndata)).append("\r\n");
         str.append("bt_fsize:").append(stringfromll(st.bt_fsize)).append("\r\n");
         str.append("bt_dsize:").append(stringfromll(st.bt_dsize)).append("\r\n");
         str.append("bt_create_time_sec:").append(stringfromll(st.bt_create_time_sec)).append("\r\n");
         str.append("bt_modify_time_sec:").append(stringfromll(st.bt_modify_time_sec)).append("\r\n");
         str.append("bt_verify_time_sec:").append(stringfromll(st.bt_verify_time_sec)).append("\r\n");
     }
 }
Example #4
0
 const std::string& Statistics::PrintStat(std::string& str)
 {
     std::string substat;
     uint64 total_connections_received = 0;
     uint64 total_commands_processed = 0;
     uint64 instantaneous_ops_per_sec = 0;
     uint64 refused_client = 0;
     ServerStatisticsTable::iterator it = m_server_stats.begin();
     while (it != m_server_stats.end())
     {
         ServerStatistics& st = it->second;
         if (st.stat_numcommands > 0)
         {
             total_connections_received += st.connections_received;
             total_commands_processed += st.stat_numcommands;
             instantaneous_ops_per_sec += st.GetOperationsPerSecond();
             substat.append(it->first).append(": ");
             substat.append("connections_received=").append(stringfromll(st.connections_received)).append(" ");
             substat.append("commands_processed=").append(stringfromll(st.stat_numcommands)).append(" ");
             substat.append("ops_per_sec=").append(stringfromll(st.GetOperationsPerSecond())).append(
                     "\n");
             substat.append("refused_client=").append(stringfromll(st.refused_connections)).append(
                                     "\n");
         }
         it++;
     }
     str.append("total_connections_received:").append(stringfromll(total_connections_received)).append("\n");
     str.append("total_commands_processed:").append(stringfromll(total_commands_processed)).append("\n");
     str.append("expired_keys:").append(stringfromll(stat_expiredkeys)).append("\n");
     str.append("instantaneous_ops_per_sec:").append(stringfromll(instantaneous_ops_per_sec)).append("\n");
     str.append("refused_client:").append(stringfromll(refused_client)).append("\n");
     str.append(substat);
     return str;
 }
Example #5
0
	void Master::PrintSlaves(std::string& str)
	{
		uint32 i = 0;
		char buffer[1024];
		SlaveConnTable::iterator it = m_slave_table.begin();
		while (it != m_slave_table.end())
		{
			const char* state = "ok";
			SlaveConnection* slave = it->second;
			switch (slave->state)
			{
				case SLAVE_STATE_WAITING_DUMP_DATA:
				{
					state = "wait_bgsave";
					break;
				}
				case SLAVE_STATE_SYNING_DUMP_DATA:
				{
					state = "send_bulk";
					break;
				}
				case SLAVE_STATE_SYNING_CACHE_DATA:
				case SLAVE_STATE_SYNCED:
				{
					state = "online";
					break;
				}
				default:
				{
					state = "invalid state";
					break;
				}
			}
			Address* remote = const_cast<Address*>(slave->conn->GetRemoteAddress());
			std::string address;
			if (InstanceOf<SocketUnixAddress>(remote).OK)
			{
				SocketUnixAddress* un = (SocketUnixAddress*) remote;
				address = "unix_socket=";
				address += un->GetPath();

			} else if (InstanceOf<SocketHostAddress>(remote).OK)
			{
				SocketHostAddress* un = (SocketHostAddress*) remote;
				address = "ip=";
				address += un->GetHost();
				address += ",port=";
				address += stringfromll(slave->port);
			}
			uint32 lag = time(NULL) - slave->acktime;
			sprintf(buffer, "slave%u:%s,state=%s,"
					"offset=%"PRId64",lag=%u\r\n", i, address.c_str(), state, slave->sync_offset, lag);
			it++;
			i++;
			str.append(buffer);
		}
	}
Example #6
0
 std::string ascii_codes(const std::string& str)
 {
     std::string ret;
     for(uint32 i = 0 ; i < str.size(); i++)
     {
         unsigned char c = (unsigned char)str.at(i);
         ret.append(stringfromll((int64)c)).append(" ");
     }
     return ret;
 }
Example #7
0
    const std::string LMDBEngine::Stats()
    {
        MDB_stat stat;
        MDB_txn* txn;
        int rc = mdb_txn_begin(m_env, NULL, 0, &txn);
        if (0 == rc)
        {
            mdb_stat(txn, m_dbi, &stat);
            mdb_txn_commit(txn);
            std::string stat_info;
            stat_info.append("lmdb version:").append(mdb_version(NULL, NULL, NULL)).append("\r\n");
            stat_info.append("db page size:").append(stringfromll(stat.ms_psize)).append("\r\n");
            stat_info.append("b-tree depath:").append(stringfromll(stat.ms_depth)).append("\r\n");
            stat_info.append("branch pages:").append(stringfromll(stat.ms_branch_pages)).append("\r\n");
            stat_info.append("leaf pages:").append(stringfromll(stat.ms_leaf_pages)).append("\r\n");
            stat_info.append("overflow oages:").append(stringfromll(stat.ms_overflow_pages)).append("\r\n");
            stat_info.append("data items:").append(stringfromll(stat.ms_entries));
            return stat_info;
        }
        else
        {
            return "Failed to get lmdb's stats";
        }

    }
Example #8
0
 std::string GetAddress()
 {
     std::string address;
     Address* remote = const_cast<Address*>(conn->GetRemoteAddress());
     if (InstanceOf<SocketHostAddress>(remote).OK)
     {
         SocketHostAddress* un = (SocketHostAddress*) remote;
         address = "ip=";
         address += un->GetHost();
         address += ",port=";
         address += stringfromll(port);
     }
     return address;
 }
Example #9
0
File: keys.cpp Project: boreys/ardb
    int Ardb::Scan(Context& ctx, RedisCommandFrame& cmd)
    {
        StringArray keys;
        std::string pattern;
        uint32 limit = 10000; //return max 10000 keys one time
        if (cmd.GetArguments().size() > 1)
        {
            for (uint32 i = 1; i < cmd.GetArguments().size(); i++)
            {
                if (!strcasecmp(cmd.GetArguments()[i].c_str(), "count"))
                {
                    if (i + 1 >= cmd.GetArguments().size() || !string_touint32(cmd.GetArguments()[i + 1], limit))
                    {
                        fill_error_reply(ctx.reply, "value is not an integer or out of range");
                        return 0;
                    }
                    i++;
                }
                else if (!strcasecmp(cmd.GetArguments()[i].c_str(), "match"))
                {
                    if (i + 1 >= cmd.GetArguments().size())
                    {
                        fill_error_reply(ctx.reply, "'MATCH' need one args followed");
                        return 0;
                    }
                    pattern = cmd.GetArguments()[i + 1];
                    i++;
                }
                else
                {
                    fill_error_reply(ctx.reply, "Syntax error, try scan 0 ");
                    return 0;
                }
            }
        }
        RedisReply& r1 = ctx.reply.AddMember();
        RedisReply& r2 = ctx.reply.AddMember();
        r2.type = REDIS_REPLY_ARRAY;

        KeyObject from;
        from.db = ctx.currentDB;
        from.type = KEY_META;
        const std::string& cursor = cmd.GetArguments()[0];
        std::string scan_start_cursor;
        if (cmd.GetArguments()[0] != "0")
        {
            if (m_cfg.scan_redis_compatible)
            {
                FindElementByRedisCursor(cursor, scan_start_cursor);
            }
            from.key = scan_start_cursor;
        }
        Iterator* iter = IteratorKeyValue(from, false);
        bool reachend = false;
        std::string tmpkey;
        while (NULL != iter && iter->Valid())
        {
            KeyObject kk;
            if (!decode_key(iter->Key(), kk) || kk.db != ctx.currentDB || kk.type != KEY_META)
            {
                reachend = true;
                break;
            }
            tmpkey.clear();
            tmpkey.assign(kk.key.data(), kk.key.size());
            if (r2.MemberSize() >= limit)
            {
                break;
            }
            if ((pattern.empty()
                    || stringmatchlen(pattern.c_str(), pattern.size(), tmpkey.c_str(), tmpkey.size(), 0) == 1))
            {
                RedisReply& rr1 = r2.AddMember();
                fill_str_reply(rr1, tmpkey);
            }
            iter->Next();
        }
        if (reachend || !iter->Valid())
        {
            fill_str_reply(r1, "0");
        }
        else
        {
            if (m_cfg.scan_redis_compatible)
            {
                uint64 newcursor = GetNewRedisCursor(tmpkey);
                fill_str_reply(r1, stringfromll(newcursor));
            }
            else
            {
                fill_str_reply(r1, tmpkey);
            }
        }
        DELETE(iter);
        return 0;
    }
Example #10
0
 int Cluster::CreateZookeeperPath()
 {
     char hostname[1024]; //_SC_HOST_NAME_MAX = 255 default,
     int hostname_len = gethostname(hostname, sizeof(hostname));
     std::string host_name(hostname, hostname_len);
     cJSON* content = cJSON_CreateObject();
     cJSON_AddItemToObject(content, "uptime", cJSON_CreateNumber(time(NULL)));
     cJSON_AddItemToObject(content, "addr", cJSON_CreateString(host_name.c_str()));
     char* jsonstr = cJSON_Print(content);
     cJSON_Delete(content);
     std::string zk_path = "/" + g_db->GetConf().cluster_name + "/servers/" + host_name + ":" + stringfromll(g_db->GetConf().PrimaryPort());
     int err = zoo_create(m_zk, zk_path.c_str(), jsonstr, strlen(jsonstr), &m_zk_acl, ZOO_EPHEMERAL, "", 0);
     free(jsonstr);
     if (0 == err)
     {
         m_state = ZK_STATE_FETCH_TOPO;
     }
     else
     {
         WARN_LOG("Failed to create path or reason:%s", zerror(err));
     }
     return err;
 }