Skip to content

Instantly share code, notes, and snippets.

View didil's full-sized avatar

Adil H didil

View GitHub Profile
@didil
didil / users.tf
Created September 25, 2020 12:58
users service terraform section
# users svc
resource "google_cloud_run_service" "users-svc" {
name = "users-svc"
location = var.gcp_region
template {
spec {
containers {
image = var.users_app_image
}
@didil
didil / terraform.tfvars
Created September 25, 2020 12:56
Terraform Variables
gcp_project_id = "didil-api-gateway-demo"
gcp_region = "europe-west1"
users_app_image = "gcr.io/didil-api-gateway-demo/users:0.1.1"
locations_app_image = "gcr.io/didil-api-gateway-demo/locations:0.1.1"
@didil
didil / users.go
Created September 25, 2020 12:40
Users service
// BuildRouter builds the router
func BuildRouter() (*chi.Mux, error) {
r := chi.NewRouter()
// the single route in our app (would need to be moved to a "handlers" package in a production app)
r.Get("/all", func(w http.ResponseWriter, r *http.Request) {
users := []User{
User{
ID: 1,
Name: "Mike",
@didil
didil / connect.rs
Created November 30, 2019 19:30
connect
pub async fn connect<A: ToSocketAddrs>(addr: A) -> Result<Protocol> {
Ok(Protocol {
connection: BufReader::new(TcpStream::connect(addr).await?),
})
}
@didil
didil / errors-1.txt
Last active November 30, 2019 19:24
first set of errors
error[E0277]: the trait bound `A: async_std::net::addr::ToSocketAddrs` is not satisfied
--> src/client.rs:35:60
|
35 | let protocol = protocol::Protocol::connect(addr)?;
| ^^^^ the trait `async_std::net::addr::ToSocketAddrs` is not implemented for `A`
|
::: src/protocol.rs:102:12
|
102 | pub fn connect<A: ToSocketAddrs>(addr: A) -> Result<Protocol> {
| ------- ------------- required by this bound in `protocol::Protocol::connect`
@didil
didil / discoverleader.go
Created April 26, 2019 17:19
producer discover leader
for {
kv, _, err := client.KV().Get(serviceKey, nil)
if err != nil {
log.Fatalf("kv acquire err: %v", err)
}
if kv != nil && kv.Session != "" {
// there is a leader
leaderHostname := string(kv.Value)
sendMsg(leaderHostname, msgID)
@didil
didil / destroysession.go
Created April 26, 2019 17:15
distributed loggers destroy session
// wait for SIGINT or SIGTERM, clean up and exit
sigCh := make(chan os.Signal)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
<-sigCh
close(doneCh)
log.Printf("Destroying session and leaving ...")
_, err = client.Session().Destroy(sID, nil)
if err != nil {
log.Fatalf("session destroy err: %v", err)
@didil
didil / acquireloop.go
Created April 26, 2019 16:59
distributed loggers acquire loop
for {
if !isLeader {
acquired, _, err := client.KV().Acquire(acquireKv, nil)
if err != nil {
log.Fatalf("kv acquire err: %v", err)
}
if acquired {
isLeader = true
log.Printf("I'm the leader !\n")
@didil
didil / digitalocean_test.go
Last active March 25, 2019 04:38
Volusnap Digital Ocean Provider tests
package api
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/didil/volusnap/pkg/models"
"github.com/stretchr/testify/assert"
@didil
didil / digitalocean.go
Last active March 25, 2019 04:36
Volusnap Digital Ocean Provider
package api
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
"time"