Skip to content

Instantly share code, notes, and snippets.

Avatar
🐦

Dustin Deus StarpTech

🐦
View GitHub Profile
@StarpTech
StarpTech / algolia-places-hook.js
Last active May 24, 2020
Algolia Places React Hook - SSR compatible - https://github.com/algolia/places
View algolia-places-hook.js
// ###################
// #### 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 }) {
@StarpTech
StarpTech / command_publish.go
Last active Jan 4, 2020
Run command and publish events
View command_publish.go
func (c *CommandBus) HandleCommand(cmd Command) {
events := c.CommandHandler.HandleCommand(cmd)
c.stan.Publish("eventstore.events", events)
}
@StarpTech
StarpTech / tracker_tanle
Created Jan 4, 2020
Processor Tracker table
View tracker_tanle
id | last_processed_event_id | processor_name
+--------------------+----------------------------+-----------------+
517800172974768129 | 01DXRWAVGFZ46AV38EA2CYXFQJ | reactor
517800173095550977 | 01DXRWAVGFZ46AV38EA2CYXFQJ | order-projector
@StarpTech
StarpTech / tracker.go
Last active Jan 5, 2020
Tracker to store last processed event id
View tracker.go
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 / dump
Last active Jan 7, 2020
NATS message SQL table
View dump
id | version | data | timestamp
+----+---------+----------------------------------------------------------------+---------------------+
1 | 1 | {"PositionID": "Auftragsfreigabe", "PositionOrderID": "A1212"} | 1578079632531167629
1 | 2 | {"PositionID": "Abteilung A", "PositionOrderID": "A1213"} | 1578079669618870080
@StarpTech
StarpTech / proxy.go
Last active Jan 5, 2020
Proxy events to stream processors
View proxy.go
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 / sub.go
Last active Jan 4, 2020
Event Store subscription
View sub.go
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"),
View replay-events.go
// 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 / config.hcl
Created Jan 1, 2020
NATS Streaming Event Store configuration
View config.hcl
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
View benchmark-bench.js
#!/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([
You can’t perform that action at this time.