Skip to content

Instantly share code, notes, and snippets.

@Muscipular
Created June 25, 2019 07:29
Show Gist options
  • Save Muscipular/08b97f69e682a8874ccc0d77d35c5652 to your computer and use it in GitHub Desktop.
Save Muscipular/08b97f69e682a8874ccc0d77d35c5652 to your computer and use it in GitHub Desktop.
RedisMonitor
{
"host": "127.0.0.1",
"port": 6379,
"password": "111111"
}
using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using StackExchange.Redis;
namespace Redis_Monitor
{
class Program
{
static async Task Main(string[] args)
{
var config = JsonDocument.Parse(File.ReadAllText("config.json"));
var options = new ConfigurationOptions();
options.AllowAdmin = true;
options.Password = config.RootElement.GetProperty("password").GetString();
options.EndPoints.Add(config.RootElement.GetProperty("host").GetString(), config.RootElement.GetProperty("port").GetInt32());
var multiplexer = await StackExchange.Redis.ConnectionMultiplexer.ConnectAsync(options);
var server = multiplexer.GetServer(multiplexer.GetEndPoints()[0]);
Console.WriteLine("Start Monitor!");
int count = 0;
var fileStream = File.AppendText($"log-{DateTime.Now:yyyyMMddHHmm}.csv");
var headers = new[] { "connected_clients", "used_memory", "instantaneous_ops_per_sec", "instantaneous_input_kbps", "instantaneous_output_kbps" };
fileStream.Write("date,");
fileStream.Write(string.Join(',', headers));
fileStream.WriteLine(",");
while (true)
{
try
{
string info;
try
{
info = server.InfoRaw();
}
catch (Exception e)
{
Console.WriteLine(e);
continue;
}
fileStream.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
fileStream.Write(',');
var matches = Regex.Matches(info, @"^(.*):\s*(.+)\s$", RegexOptions.Multiline);
foreach (var header in headers)
{
foreach (Match match in matches)
{
if (match.Success)
{
if (match.Groups[1].Value == header)
{
Console.WriteLine($"{match.Groups[1].Value} : {match.Groups[2].Value}");
fileStream.Write(match.Groups[2].Value);
fileStream.Write(',');
}
}
}
}
fileStream.WriteLine();
fileStream.Flush();
count++;
if (count >= 3600)
{
var path = (fileStream.BaseStream as FileStream).Name;
fileStream.Close();
var zipArchive = ZipFile.Open(path + ".zip", ZipArchiveMode.Create);
var entry = zipArchive.CreateEntry(Path.GetFileName(path));
var zStream = entry.Open();
var openRead = File.OpenRead(path);
await openRead.CopyToAsync(zStream);
await zStream.FlushAsync();
openRead.Dispose();
zStream.Flush();
zStream.Close();
zStream.Dispose();
zipArchive.Dispose();
File.Delete(path);
fileStream = File.AppendText($"log-{DateTime.Now:yyyyMMddHHmm}.csv");
count = 0;
}
}
catch (Exception e)
{
Console.WriteLine(e);
fileStream.Close();
break;
}
Thread.Sleep(1000);
}
Console.ReadKey(true);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment