github.com/theskyinflames/bpulse-go-client/com.bpulse.client.go.bpulseclient/common/lib_gc_configurable_from_json

Go language client for bpulse


Keywords
bpulse-client, golang
License
Apache-2.0
Install
go get github.com/theskyinflames/bpulse-go-client/com.bpulse.client.go.bpulseclient/common/lib_gc_configurable_from_json

Documentation

What is this?

This is a Go client for BPulse monitoring tool.

Use it!

To use it, the next environment variables must be set:

  • GO_COMMON_LIB_CONFIGURATION_FILE This variable is set to the path of the configurtion file BPulseGoClient.ini
  • GO_COMMON_LIB_EVENTS_FILE This variable is set to the path of the configuration file EventsConfiguration.json

In addition, the steps to integrate this BPulse client in your project is:

  • Define your pulse in BPulse:
    • Its typeId
    • Its attributes list
  • Integrating Go BPulse client in your project:

    • Add the BPulse client libraries to your Godeps (or another libraries manager you use) sh # BPulse github.com/theskyinflames/bpulse-go-client # Go client for BPulse github.com/theskyinflames/bpulse-protobuf-go # MDH protobuf messages
    • Implement the necessary interfaces:

      • rq maker: com.bpulse.client.go.bpulseclient/bpulsegoclient/lib_pulses_sender.PulseRQMaker
      • rs instance builder: com.bpulse.client.go.bpulseclient/bpulsegoclient/lib_send_channel_adapter.PulseRSInstanceGetter
      • rs processor (optional): com.bpulse.client.go.bpulseclient/bpulsegoclient/lib_pulses_sender.PulseRSProcessor
    • Start the bpulse client:

        if err := bpulsegoclient.StartBPulseClient(rq_maker, rs_processor,rs_instance_getter); err!=nil {
          panic(err)
        }
    • Send pulses:

      /**
                * There are several way to use the aggregators:
                *
                * 1.- The first option is taking an aggregator once, and to use it for all of the application.
                *     In this case, we'll use always the same aggregator. By this way, we'll have only a unique block of pulse to send.
                *     It is necessary to keep in mind that the input channel of the aggregator is buffered to the Pulse RQ block size.
                *     Therefore, if we think there will be more concurrent pulse than the block size, this option is not a good idea
                *     unless we expand the size of the pulse RQ size.
                *
                * 2.- Another option is to take an aggregator from the pool every time we need it. In this case, we must to understand
                *     that each aggregator has its own slice of pulses, and that, until it not have as many pulses as RQ size,
                *     the aggregator does not put all of them into a PulseRQ to send it.
                */
      
                // Take the pulses aggregator from the aggregator's container.
                if aggregator, err := AGG_CONTAINER.Container.GetPulseAggregator(AGG_CONTENT.DEFAULT_AGGREGATOR_NAME); err!=nil {
                    panic(err)
                }else {
      
                    // Take the aggregator channel
                    if ch, err := aggregator.GetPulsesAggregationChannel(); err!=nil {
                        panic(err)
                    }else {
      
                        // Send the pulse
                        ch <- pulse
      
                        // Restore the aggregator to the aggregator's container
                        AGG_CONTAINER.Container.ReleasePulseAggregator(AGG_CONTENT.DEFAULT_AGGREGATOR_NAME, aggregator)
                    }
                }
    • Shutdown the client:

      errors_list := bpulsegoclient.ShutdownBPulseClient()
      for e:=errors_list.Front();e!=nil;e=e.Next(){
          fmt.Println(e.Value.(error).Error())
      }

    Example

    There is an example of use at bpulse-go-client/com.bpulse.client.go.bpulseclient/bpulsegoclient/example To execute this example:

    • Clone the project and go to its root directory:
    git clone https://github.com/theskyinflames/bpulse-go-client.git
    cd bpulse-go-client
    • Set the correct values in the configuration file bpulse-go-client/conf/BPulseGoClient.ini : RESTFUL_SEND_CHANNEL_ADAPTER_HOST BPulse host name. RESTFUL_SEND_CHANNEL_ADAPTER_URL_PORT BPulse host port. RESTFUL_SEND_CHANNEL_ADAPTER_USER BPulse user login. RESTFUL_SEND_CHANNEL_ADAPTER_URL_PWD BPulse user password.

    • Execute the example:

    cd bpulse-go-client/com.bpulse.client.go.bpulseclient/bpulsegoclient/example
    go build ("go build -tags debug" if we want debug traces) 
    source ./set_env.sh
    ./example

    Start as a Docker container

    The example also can be started as a docker container. To do it, you must go to com.bpulse.client.go.pbulseclient/bpulseclient/example/assets and do this:

    • Install Docker Engine and Docker Compose in your system.

    • Edit the docker-compose.yml file to set the properties:

    • BPULSEID
    • BPULSE_HOST
    • BPULSE_PORT
    • BPULSE_USER
    • BPULSE_PWD

    • Build the Docker image and run the container:

    docker build -t theskyinflames/bpc
    docker-compose up -d bpc
    • Examine BPulse client logs.