npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

virtdb-provider

v4.0.12

Published

node.js package for connecting a Data Provider to the VirtDB system

Downloads

22

Readme

node-virtdb-provider (v2.3)

Overview

This is a node.js module that helps creating new data connectors to the VirtDB system.

How to write a new data connector

By using the virtdb-provider module it is quite easy to create new connectors. Only the METADATA and the DATA interfaces have to be implemented. To get detailed information of the structures used in the following examples see the starschema/virtdb-proto project.

METADATA

The METADATA interface is used for letting VirtDB know the structure of the data provided. This is done by replying to METADATA requests.

# A typical meta_data request.
request =
    Name: "customers"
    WithFields: false
}
# A typical meta_data reply
reply =
    Tables: [
        Name: "customers"
        Fields: [
            Name: "id"
            Desc:
                Type: 'UINT64'
        ,
            Name: "name"
            Desc:
                Type: 'STRING'
        ]
    ]

DATA

The DATA interface is used for sending data back to queries. Data is sent in column chunks.

# A typical query
query =
    QueryId: "e142fbd0-9d77-11e4-bd06-0800200c9a66"
    Table: "customers"
    Fields: [
        Name: "id"
        Desc:
            Type: 'UINT64'
    ,
        Name: "name"
        Desc:
            Type: 'STRING'
    ]
    Filter: [
        Operand: "like"
        Simple:
            Variable: "name"
            Value: "John%"
    ]
}
# A typical column reply for the query. (Separate replies are needed for each columns requested in the query.)
columnChunk =
    QueryId: "e142fbd0-9d77-11e4-bd06-0800200c9a66"
    Name: "name"
    SeqNo: 0 # a strictly increasing series for each column
    Data:
        Type: 'STRING'
        StringValue: ['John Doe', 'John Smith', 'Johnathan Apple']
    EndOfData: true
    CompType: "NO_COMPRESSION" # alternative: LZ4_COMPRESSION

Sample implementation

DataProvider = require 'virtdb-provider'

# component name should be unique throughout the system
# url is the ZeroMQ url of the virtdb config service component.
virtdb = new DataProvider('<component-name>', '<url>')

# meta_data is a list of table descriptions that match the request criteria
virtdb.onMetaDataRequest (request, sendFunction) ->
    metadata = getMetadataFromYourSource request
    sendFunction null, metadata
    return

# virtdb data is sent by column chunks
virtdb.onQuery (request, callback) ->
    data = queryYourSource request
    reply = virtdb.getDataHandler request
    for row in data
        reply.pushObject row
    reply.send()
        
# template contains the structure of the configuration you demand
template = 
    AppName: '<component-name>'
    Config: [
        VariableName: '<key>'
        Type: 'STRING'
        Scope: '<scope>'
    ]

# with this method you register your config template in the system and set the function where you will receive the configuration on    
virtdb.registerConfig template, (config) ->
    console.log "Yay, new config: #{config}"

VirtDBDataProvider

constructor (name, connectionString, callback)

Connects to the VirtDB system.   
  • name: the name of component. This name has to be unique throughout a VirtDB installation.
  • connectionString: the ZeroMQ connection string of the Endpoint service socket of the Config Service component.
  • callback: function callback(err) A function that is called when connection is finished. err is defined if something went wrong.

onQuery(callback)

Calls the given callback when a query request is received.
  • callback: function callback(request)

onMetaDataRequest(requestHandler, options, callback)

Calls the given callback when a meta data request is received.
  • requestHandler(envelope, request, sendMethod): The callback that will be called when Metadata request arrives.
    • envelope: The id of the message. It should be passed to the sendMethod on sending the reply.
    • request: The metadata request describing the requested table and if the reply should contain the fields beside the table names.
    • sendMethod(err, envelope, metadata): The method that needs to be called when the metadata is available.
  • options: The options for the server that is to be initialized. For the possible options and their meanings see the virtdb-connector project.
  • callback(err, address): A callback that is called when an error happens during the setup or the server is set up and listening.

registerConfig(template, callback)

Makes the component configurable through the VirtDB config protocol. For a detailed protocol description see the [virtdb-proto](https://github.com/starschema/virtdb-proto) project.
  • template: The configuration options of the component.
  • callback: function callback(config) Called when configuration messages arrive.

createTable(tableName, schema)

Creates a new VirtDBTable object which helps to send a response to a MetaData request.
  • name: the name of the table.
  • schema: the name of the scheam which tha table belongs to.

getDataHandler(request)

Creates a new VirtDBReply object which helps to send a response to a Query request. Returns null if no table with the name and schema in the Query has been created before with createTable. The created table also have to contain the fields that are requested in the Query.
  • query: the incoming Query request.

close()

Closes sockets and connections.

detectFieldType(sample)

Static. Detects the field type of the column through a data sample.
  • sample: an array of data from the column which we want to detect.

VirtDBData

constructor (query)

Creates a new VirtDBReply object which helps to send a response to a Query request.
  • query: the incoming Query request.

pushObject(row)

Adds a data row to the reply.
  • row: Key-value pairs where the key is the identifier of the column and the value is the value in the row.

send(endOfData, seqNo)

Sends the Column response.
  • endOfData: Default: true. If it is false it indicates the response is only a part of the whole response.
  • seqNo: optional: In some cases it is more efficient to send the data as it arrives even if it is not ordered. In this case seqNo can't be figured out by VirtDBData and has to be set externally. First seqNo must always be 0 and seqNo is strictly increasing.

#VirtDBTable ##

constructor (name, schema)

Creates a new VirtDBTable object which helps to send a response to a MetaData request.
  • name: the name of the table.
  • schema: the name of the scheam which tha table belongs to.

addField(name, type)

Adds a field to the table.
  • field: the name of the field or the data column.
  • type: the type of the field. For possible values see the common.proto file in the starschema/virtdb-proto project.

Credits

VirtDB is the product of Starschema Technologies.. For any questions, comments or issues please contact us: @virtdb