Skip to content

Instantly share code, notes, and snippets.

View StarpTech's full-sized avatar

Dustin Deus StarpTech

View GitHub Profile
#!/usr/bin/env node
'use strict'
const inquirer = require('inquirer')
const bench = require('./lib/bench')
const { choices, list } = require('./lib/packages')
const argv = process.argv.slice(2)
async function select (callback) {
const result = await inquirer.prompt([
@StarpTech
StarpTech / config.hcl
Created January 1, 2020 18:22
NATS Streaming Event Store configuration
max_payload: 10485760
streaming {
store: "SQL"
sql_options: {
no_caching: true
driver: "postgres"
source: "dbname=mydb host=roach1 port=26257 user=test sslmode=disable readTimeout=5s writeTimeout=5s"
}
store_limits {
max_subs: 100
@StarpTech
StarpTech / replay-events.go
Last active January 4, 2020 19:20
Replay events
// Subscribe starting with most recently published value
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
}, stan.StartWithLastReceived())
// Receive all stored values in order
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
}, stan.DeliverAllAvailable())
@StarpTech
StarpTech / sub.go
Last active January 4, 2020 22:35
Event Store subscription
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
fmt.Printf("Received a message: %s\n", string(m.Data))
// your code
if err := m.Ack(); err != nil {
// event is redelivered
return
}
},
stan.maxInFlight(1),
stan.AckWait("30s"),
@StarpTech
StarpTech / proxy.go
Last active January 5, 2020 13:20
Proxy events to stream processors
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
// TODO check if event was already processed
stan.PublishAsync("eventstore.events.order-projection", m.Data)
stan.PublishAsync("eventstore.events.order-reactor", m.Data)
// TODO track event as processed
// ack message
if err := m.Ack(); err != nil {
log.WithFields(eventLogFields).WithFields(r.baseLogFields).WithError(err).Error("ack event")
@StarpTech
StarpTech / dump
Last active January 7, 2020 16:50
NATS message SQL table
id | version | data | timestamp
+----+---------+----------------------------------------------------------------+---------------------+
1 | 1 | {"PositionID": "Auftragsfreigabe", "PositionOrderID": "A1212"} | 1578079632531167629
1 | 2 | {"PositionID": "Abteilung A", "PositionOrderID": "A1213"} | 1578079669618870080
@StarpTech
StarpTech / tracker.go
Last active January 5, 2020 11:32
Tracker to store last processed event id
sub, err := sc.Subscribe("eventstore.events", func(m *stan.Msg) {
// check if event was already processed
if p.tracker.IsDuplicateOperation(p.name, event.ID) {
log.WithFields(eventLogFields).WithFields(subLogFields).Trace("duplicate")
if err := m.Ack(); err != nil {
log.WithFields(eventLogFields).WithFields(subLogFields).WithError(err).Error("ack duplicate event")
}
return
}
@StarpTech
StarpTech / tracker_tanle
Created January 4, 2020 19:14
Processor Tracker table
id | last_processed_event_id | processor_name
+--------------------+----------------------------+-----------------+
517800172974768129 | 01DXRWAVGFZ46AV38EA2CYXFQJ | reactor
517800173095550977 | 01DXRWAVGFZ46AV38EA2CYXFQJ | order-projector
@StarpTech
StarpTech / command_publish.go
Last active January 4, 2020 21:36
Run command and publish events
func (c *CommandBus) HandleCommand(cmd Command) {
events := c.CommandHandler.HandleCommand(cmd)
c.stan.Publish("eventstore.events", events)
}
@StarpTech
StarpTech / algolia-places-hook.js
Last active October 12, 2021 13:07
Algolia Places React Hook - SSR compatible - https://github.com/algolia/places
// ###################
// #### React hook ######
// ###################
import { useEffect, useRef, useState } from 'react';
/* eslint-disable global-require */
const Places = typeof window !== 'undefined' && require('places.js');
export default function useAlgoliaPlaces({ options, events }) {