Внимание! В данный момент не все функции доступны. LibRrdSharp может проделывать основные вещи с базами rrdtool и графиками.
- Генерирование графиков
- Создание баз данных
- Загрузка баз данных
- Дампинг баз данных в xml формат
- Обновление баз данных
Перед тем, как использовать библиотеку, нужно произвести сборку.
Для Linux..
cd LibRrd/src
dotnet build
Для Windows нужно открыть Visual Studio 2019-2022 и нажать на кнопку build для сборки. После проделанных манипуляций библиотека готова к использованию.
Перед использованием, нужно создать базу данных либо загрузить её.
Для это предусмотрены 2 метода в классе RRD
(Create
, Load
) соответственно.
Перед всеми действиями, скачайте или соберите rrdtool под вашу ОС, и укажите полный путь к исполняемому файлу rrdtool в статической переменной
RRD_PATH
. В противном случае будет исключение.
var rrd = RRD.Create("system.rrd", step, new List<IDataSource>()
{
new DS("template", DataType.GAUGE, 20, 0, 100)
}, new List<IRraArchive>()
{
new RRA(RraType.LAST, 100, 0.5),
new RRA(RraType.AVERAGE, 100, 0.5),
new RRA(RraType.MIN, 100, 0.5),
new RRA(RraType.MAX, 100, 0.5)
});
var rrd = RRD.Load("test.rrd");
var xml = rrd.Dump(); // Возвращает строку
После вызова метода
Render
, график сохрантися по пути который вы указали вFileName
. Если нужно получить объект классаImage
, для этого предназначен методGetRenderedImage
.
var graph = new Graph(800, 360, DateTime.Now, DateTime.Now)
{
Title = "Test",
File = "test.png",
Watermark = "Test",
TitleFont = new TitleFont("Ubuntu Mono Medium", 15),
WatermarkFont = new WatermarkFont("Ubuntu Mono Medium", 10),
DefaultFont = new DefaultFont("Ubuntu Mono Medium", 10)
};
graph.Defs.Add(new Def(rrd, rrd.GetDataSourceByName("template"), RraType.LAST, "template"));
graph.Cdefs.Add(new Cdef("memory_cdef", $"template_def,UN,0,template_def,IF"));
graph.Legend.Add(new Comment("Cur".PadLeft(23)));
graph.Legend.Add(new Comment("Avg".PadLeft(9)));
graph.Legend.Add(new Comment("Min".PadLeft(8)));
graph.Legend.Add(new Comment("Max\\n".PadLeft(9)));
graph.Legend.Add(new Line(graph.Defs.First(elem => elem.Name == "template_def"), Color.Brown, 1, "TestValue"));
graph.Legend.Add(new Gprint(graph.Defs.First(elem => elem.Name == "template_def"), RraType.LAST, "%6.2lf %%".PadLeft(15)));
graph.Legend.Add(new Gprint(graph.Defs.First(elem => elem.Name == "template_def"), RraType.AVERAGE, "%6.2lf %%"));
graph.Legend.Add(new Gprint(graph.Defs.First(elem => elem.Name == "template_def"), RraType.MIN, "%6.2lf %%"));
graph.Legend.Add(new Gprint(graph.Defs.First(elem => elem.Name == "template_def"), RraType.MAX, "%6.2lf %%\\n"));
graph.Render();
MIT