bindings-librrd (empty) → 0.1
raw patch · 7 files changed
+318/−0 lines, 7 filesdep +basedep +bindings-DSLsetup-changed
Dependencies added: base, bindings-DSL
Files
- Bindings/Librrd.hsc +158/−0
- Bindings/Librrd/Client.hsc +39/−0
- Bindings/Posix/Time.hsc +30/−0
- COPYING +29/−0
- Setup.hs +4/−0
- bindings-librrd.cabal +41/−0
- cbits/inlines.c +17/−0
+ Bindings/Librrd.hsc view
@@ -0,0 +1,158 @@+#include <bindings.dsl.h>+#include <rrd.h>++-- |<http://oss.oetiker.ch/rrdtool/doc/librrd.en.html>++module Bindings.Librrd where+import Bindings.Posix.Time+import System.Posix.Types+#strict_import++-- Formerly rrd_nan_inf.h+#cinline DNAN, IO CDouble+#cinline DINF, IO CDouble+#ccall rrd_set_to_DNAN, IO CDouble+#ccall rrd_set_to_DINF, IO CDouble++-- Transplanted from rrd_format.h+#synonym_t rrd_value_t, CDouble++-- Information about an rrd file+#starttype struct rrd_file_t+#field header_len, COff+#field file_len , COff+#field pos , COff+#field pvt , Ptr ()+#stoptype++-- information used for the conventional file access methods+#starttype struct rrd_simple_file_t+#field fd , CInt+#if HAVE_MMAP+#field file_start, Ptr CChar+#field mm_prot , CInt+#field mm_flags , CInt+#endif+#stoptype++-- rrd info interface+#starttype struct rrd_blob_t+#field size, CULong+#field ptr , Ptr CUChar+#stoptype++#integral_t rrd_info_type_t+#num RD_I_VAL+#num RD_I_CNT+#num RD_I_STR+#num RD_I_INT+#num RD_I_BLO++#starttype union rrd_infoval+#union_field u_cnt, CULong+#union_field u_val, <rrd_value_t>+#union_field u_str, CString+#union_field u_int, CInt+#union_field u_blo, <rrd_blob_t>+#stoptype+#synonym_t rrd_infoval_t, <rrd_infoval>++#starttype struct rrd_info_t+#field key , CString+#field type , <rrd_info_type_t>+#field value, <rrd_infoval_t>+#field next , Ptr <rrd_info_t>+#stoptype++{-|The correct type for this callback should be @'Ptr' a -> 'CSize'+ -> 'Ptr' b -> 'IO' 'CSize'@ but that's impossible because of+ bindings-DSL restriction.+ -}+#callback rrd_output_callback_t, Ptr () -> CSize -> Ptr () -> IO CSize++-- main function blocks+#ccall rrd_create , CInt -> Ptr CString -> IO CInt+#ccall rrd_info , CInt -> Ptr CString -> IO (Ptr <rrd_info_t>)+#cinline rrd_info_push , Ptr <rrd_info_t> -> CString -> <rrd_info_type_t> -> Ptr <rrd_infoval_t> -> IO (Ptr <rrd_info_t>)+#ccall rrd_info_print , Ptr <rrd_info_t> -> IO ()+#ccall rrd_info_free , Ptr <rrd_info_t> -> IO ()+#ccall rrd_update , CInt -> Ptr CString -> IO CInt+#ccall rrd_update_v , CInt -> Ptr CString -> IO (Ptr <rrd_info_t>)+#ccall rrd_graph , CInt -> Ptr CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CInt -> Ptr CFile -> Ptr CDouble -> Ptr CDouble -> IO CInt+#ccall rrd_graph_v , CInt -> Ptr CString -> IO (Ptr <rrd_info_t>)+#ccall rrd_fetch , CInt -> Ptr CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr <rrd_value_t>) -> IO CInt+#ccall rrd_restore , CInt -> Ptr CString -> IO CInt+#ccall rrd_dump , CInt -> Ptr CString -> IO CInt+#ccall rrd_tune , CInt -> Ptr CString -> IO CInt+#ccall rrd_last , CInt -> Ptr CString -> IO CTime+#ccall rrd_lastupdate , CInt -> Ptr CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt+#ccall rrd_first , CInt -> Ptr CString -> IO CTime+#ccall rrd_resize , CInt -> Ptr CString -> IO CInt+#ccall rrd_strversion , IO CString+#ccall rrd_version , IO CDouble+#ccall rrd_xport , CInt -> Ptr CString -> Ptr CInt -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr <rrd_value_t>) -> IO CInt+#ccall rrd_flushcached , CInt -> Ptr CString -> IO CInt+#ccall rrd_freemem , Ptr a -> IO ()++-- thread-safe (hopefully)+#ccall rrd_create_r , CString -> CULong -> CTime -> CInt -> Ptr CString -> IO CInt+-- NOTE: rrd_update_r are only thread-safe if no at-style time+-- specifications get used!!!+#ccall rrd_info_r , CString -> IO (Ptr <rrd_info_t>)+#ccall rrd_update_r , CString -> CString -> CInt -> Ptr CString -> IO CInt+#ccall rrd_fetch_r , CString -> CString -> Ptr CTime -> Ptr CTime -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr <rrd_value_t>) -> IO CInt+#ccall rrd_dump_r , CString -> CString -> IO CInt+#ccall rrd_last_r , CString -> IO CTime+#ccall rrd_lastupdate_r, CString -> Ptr CTime -> Ptr CULong -> Ptr (Ptr CString) -> Ptr (Ptr CString) -> IO CInt+#ccall rrd_first_r , CString -> CInt -> IO CTime++#ccall rrd_dump_cb_r , CString -> CInt -> <rrd_output_callback_t> -> Ptr b -> IO CInt++-- Transplanted from rrd_parsetime.h+#integral_t rrd_timetype_t+#num ABSOLUTE_TIME+#num RELATIVE_TO_START_TIME+#num RELATIVE_TO_END_TIME++#pointer TIME_OK++#starttype struct rrd_time_value+#field type , <rrd_timetype_t>+#field offset, CLong+#field tm , <tm>+#stoptype+#synonym_t rrd_time_value_t, <rrd_time_value>++#ccall rrd_parsetime, CString -> Ptr <rrd_time_value_t> -> IO CString++#starttype struct rrd_context+#array_field lib_errstr, CChar+#array_field rrd_error , CChar+#stoptype+#synonym_t rrd_context_t, <rrd_context>++-- returns the current per-thread rrd_context+#ccall rrd_get_context, IO (Ptr <rrd_context_t>)++#ccall rrd_proc_start_end, Ptr <rrd_time_value_t> -> Ptr <rrd_time_value_t> -> Ptr CTime -> Ptr CTime -> IO CInt++-- HELPER FUNCTIONS+-- rrd_set_error() is unavailable as it uses C varargs.+#ccall rrd_clear_error, IO ()+#ccall rrd_test_error , IO CInt+#ccall rrd_get_error , IO CString+-- rrd_strerror is thread safe, but still it uses a global buffer (but+-- one per thread), thus subsequent calls within a single thread+-- overwrite the same buffer+#ccall rrd_strerror , CInt -> IO CString++-- MULTITHREADED HELPER FUNCTIONS+#ccall rrd_new_context , IO (Ptr <rrd_context_t>)+#ccall rrd_free_context, Ptr <rrd_context_t> -> IO ()++-- UTILITY FUNCTIONS+#ccall rrd_random , IO CLong+#ccall rrd_add_ptr , Ptr (Ptr (Ptr a)) -> Ptr CSize -> Ptr a -> IO CInt+#ccall rrd_add_strdump, Ptr (Ptr CString) -> Ptr CSize -> CString -> IO CInt+#ccall rrd_free_ptrs , Ptr (Ptr (Ptr a)) -> CSize -> IO ()+#ccall rrd_mkdir_p , CString -> CMode -> IO CInt
+ Bindings/Librrd/Client.hsc view
@@ -0,0 +1,39 @@+#include <bindings.dsl.h>+#include <HsBaseConfig.h>+#include <rrd_client.h>++-- |<http://oss.oetiker.ch/rrdtool/doc/librrd.en.html>+-- +-- <http://oss.oetiker.ch/rrdtool/doc/rrdcached.en.html>++module Bindings.Librrd.Client where+#strict_import++#cinline RRDCACHED_DEFAULT_ADDRESS, CString+#cinline RRDCACHED_DEFAULT_PORT , CString+#cinline ENV_RRDCACHED_ADDRESS , CString++#ccall rrdc_connect , CString -> IO CInt+#ccall rrdc_is_connected, CString -> IO CInt+#ccall rrdc_disconnect , IO CInt++#ccall rrdc_update, CString -> CInt -> Ptr CString -> IO CInt++#ccall rrdc_flush , CString -> IO CInt+#ccall rrdc_flush_if_daemon, CString -> CString -> IO CInt++-- Helper definitions for rrdc_stats_t+#num RRDC_STATS_TYPE_GAUGE+#num RRDC_STATS_TYPE_COUNTER++#starttype struct rrdc_stats_s+#field name , CString+#field type , Word16+#union_field value.counter, Word64+#union_field value.gauge , CDouble+#field next , Ptr <rrdc_stats_s>+#stoptype+#synonym_t rrdc_stats_t, <rrdc_stats_s>++#ccall rrdc_stats_get , Ptr (Ptr <rrdc_stats_t>) -> IO CInt+#ccall rrdc_stats_free, Ptr <rrdc_stats_t> -> IO ()
+ Bindings/Posix/Time.hsc view
@@ -0,0 +1,30 @@+#include <bindings.dsl.h>+#include <time.h>++-- |This module temporarily exists here, only because bindings-posix+-- currently doesn't have struct tm.++module Bindings.Posix.Time where+#strict_import++#starttype struct tm+#field tm_sec , CInt+#field tm_min , CInt+#field tm_hour , CInt+#field tm_mday , CInt+#field tm_mon , CInt+#field tm_year , CInt+#field tm_wday , CInt+#field tm_yday , CInt+#field tm_isdst , CInt+#stoptype++#num CLOCKS_PER_SEC++#ccall clock , IO CClock+#ccall difftime , CTime -> CTime -> IO CDouble+#ccall gmtime , Ptr CTime -> IO (Ptr <tm>)+#ccall localtime , Ptr CTime -> IO (Ptr <tm>)+#ccall mktime , Ptr <tm> -> IO CTime+#ccall strftime , CString -> CSize -> CString -> Ptr <tm> -> IO CSize+#ccall time , Ptr CTime -> IO CTime
+ COPYING view
@@ -0,0 +1,29 @@+<!-- -*- xml -*-++bindings-librrd はパブリックドメインに在ります。+bindings-librrd is in the public domain.++See http://creativecommons.org/licenses/publicdomain/++-->++<rdf:RDF xmlns="http://web.resource.org/cc/"+ xmlns:dc="http://purl.org/dc/elements/1.1/"+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">+ <Work rdf:about="http://cielonegro.org/Bindings-librrd.html">+ <dc:title>bindings-librrd</dc:title>+ <dc:rights>+ <Agent>+ <dc:title>PHO</dc:title>+ </Agent>+ </dc:rights>+ <license rdf:resource="http://web.resource.org/cc/PublicDomain" />+ </Work>+ + <License rdf:about="http://web.resource.org/cc/PublicDomain">+ <permits rdf:resource="http://web.resource.org/cc/Reproduction" />+ <permits rdf:resource="http://web.resource.org/cc/Distribution" />+ <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />+ </License>++</rdf:RDF>
+ Setup.hs view
@@ -0,0 +1,4 @@+#!/usr/bin/env runhaskell++import Distribution.Simple+main = defaultMain
+ bindings-librrd.cabal view
@@ -0,0 +1,41 @@+Name: bindings-librrd+Synopsis: Low level bindings to RRDtool+Description:+ RRDtool is a high performance data logging and graphing system for+ time series data.++ This package provides low-level bindings to librrd, which contains+ most of the functionality in RRDtool.+Version: 0.1+License: PublicDomain+License-File: COPYING+Author: PHO <pho at cielonegro dot org>+Maintainer: PHO <pho at cielonegro dot org>+Homepage: http://cielonegro.org/Bindings-librrd.html+Category: FFI+Tested-With: GHC == 6.12.1+Cabal-Version: >= 1.6+Build-Type: Simple++Source-Repository head+ Type: git+ Location: git://git.cielonegro.org/bindings-librrd.git++Library+ Build-Depends:+ base == 4.2.*,+ bindings-DSL == 1.0.*++ PkgConfig-Depends:+ librrd >= 1.4.3++ Extensions:+ ForeignFunctionInterface++ Exposed-Modules:+ Bindings.Librrd+ Bindings.Librrd.Client+ Bindings.Posix.Time++ C-Sources:+ cbits/inlines.c
+ cbits/inlines.c view
@@ -0,0 +1,17 @@+#include <bindings.cmacros.h>+#include <HsBaseConfig.h>+#include <rrd.h>+#include <rrd_client.h>++BC_INLINE_(DNAN, double)+BC_INLINE_(DINF, double)++rrd_info_t*+inline_rrd_info_push(rrd_info_t * info,+ char *key, rrd_info_type_t type, rrd_infoval_t* value) {+ return rrd_info_push(info, key, type, *value);+}+ +BC_INLINE_(RRDCACHED_DEFAULT_ADDRESS, const char*)+BC_INLINE_(RRDCACHED_DEFAULT_PORT , const char*)+BC_INLINE_(ENV_RRDCACHED_ADDRESS , const char*)