Change response shape from redis_info endpoint

This commit is contained in:
Ken Hibino 2021-01-04 09:31:10 -08:00
parent 4951d2f571
commit 0c3cd80728
6 changed files with 42 additions and 8 deletions

View File

@ -57,16 +57,19 @@ func (srv *staticFileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir(srv.staticPath)).ServeHTTP(w, r)
}
const addr = "127.0.0.1:8080"
const (
addr = "127.0.0.1:8080"
redisAddr = "localhost:6379" // TODO: make this configurable
)
func main() {
inspector := asynq.NewInspector(asynq.RedisClientOpt{
Addr: "localhost:6379",
Addr: redisAddr,
})
defer inspector.Close()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Addr: redisAddr,
})
defer rdb.Close()

View File

@ -14,6 +14,11 @@ import (
// - http.Handler(s) for redis info related endpoints
// ****************************************************************************
type RedisInfoResponse struct {
Addr string `json:"address"`
Info map[string]string `json:"info"`
}
func newRedisInfoHandlerFunc(rdb *redis.Client) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
@ -23,7 +28,11 @@ func newRedisInfoHandlerFunc(rdb *redis.Client) http.HandlerFunc {
return
}
info := parseRedisInfo(res)
if err := json.NewEncoder(w).Encode(info); err != nil {
resp := RedisInfoResponse{
Addr: redisAddr,
Info: info,
}
if err := json.NewEncoder(w).Encode(resp); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

View File

@ -1,5 +1,5 @@
import { Dispatch } from "redux";
import { getRedisInfo, RedisInfo } from "../api";
import { getRedisInfo, RedisInfoResponse } from "../api";
// List of redis-info related action types.
export const GET_REDIS_INFO_BEGIN = "GET_REDIS_INFO_BEGIN";
@ -12,7 +12,7 @@ interface GetRedisInfoBeginAction {
interface GetRedisInfoSuccessAction {
type: typeof GET_REDIS_INFO_SUCCESS;
payload: RedisInfo;
payload: RedisInfoResponse;
}
interface GetRedisInfoErrorAction {

View File

@ -68,6 +68,11 @@ export interface ListQueueStatsResponse {
stats: { [qname: string]: DailyStat[] };
}
export interface RedisInfoResponse {
address: string;
info: RedisInfo;
}
// Return value from redis INFO command.
// See https://redis.io/commands/info#return-value.
export interface RedisInfo {
@ -723,7 +728,7 @@ export async function listSchedulerEnqueueEvents(
return resp.data;
}
export async function getRedisInfo(): Promise<RedisInfo> {
export async function getRedisInfo(): Promise<RedisInfoResponse> {
const resp = await axios({
method: "get",
url: `${BASE_URL}/redis_info`,

View File

@ -8,11 +8,13 @@ import { RedisInfo } from "../api";
interface RedisInfoState {
loading: boolean;
address: string;
data: RedisInfo | null;
}
const initialState: RedisInfoState = {
loading: false,
address: "",
data: null,
};
@ -36,7 +38,8 @@ export default function redisInfoReducer(
case GET_REDIS_INFO_SUCCESS:
return {
loading: false,
data: action.payload,
address: action.payload.address,
data: action.payload.info,
};
default:

View File

@ -25,6 +25,7 @@ function mapStateToProps(state: AppState) {
return {
loading: state.redis.loading,
redisInfo: state.redis.data,
redisAddress: state.redis.address,
pollInterval: state.settings.pollInterval,
};
}
@ -38,11 +39,24 @@ function RedisInfoView(props: Props) {
usePolling(getRedisInfoAsync, pollInterval);
console.log("DEBUG: redisInfo", props.redisInfo);
// Metrics to show
// - Used Memory
// - Memory Fragmentation Ratio
// - Connected Clients
// - Connected Replicas (slaves)
// - Persistence (rdb_last_save_time, rdb_changes_since_last_save)
// - Errors (rejected_connections)
return (
<Container maxWidth="lg" className={classes.container}>
<Grid container spacing={3}>
<Grid item xs={12}>
<Typography variant="h5">Redis Info</Typography>
<Typography variant="subtitle1" color="textSecondary">
Connected to: {props.redisAddress}
</Typography>
</Grid>
</Grid>
</Container>