Skip to content
Snippets Groups Projects
Commit 8adc8a34 authored by dylan.peiry's avatar dylan.peiry
Browse files

added azure storage handler

parent 8073982c
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,7 @@ package main ...@@ -3,7 +3,7 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
types "local/types" types "local/helper"
"net" "net"
"os" "os"
"strconv" "strconv"
......
package helper
import (
"context"
"encoding/json"
"fmt"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
dotenv "github.com/joho/godotenv"
"io"
"os"
)
var client *azblob.Client
var err error
var ctx context.Context
// test program for the object storage module
func main() {
err := dotenv.Load() //load .env file
if err != nil {
panic(err)
}
var connectionString = os.Getenv("AZ_STORAGE_CONNECTION_STRING")
var containerName = ""
ConnectToStorage(connectionString)
ListBlobsOnContainer(containerName, nil)
data := ReadFromStorage(containerName, "test.json")
var transactions []Transaction
err = json.Unmarshal(data, &transactions)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", transactions)
}
func ConnectToStorage(connectionString string) {
client, err = azblob.NewClientFromConnectionString(connectionString, nil)
if err != nil {
panic(err)
}
ctx = context.Background()
}
func ListBlobsOnContainer(containerName string, options *azblob.ListBlobsFlatOptions) {
fmt.Printf("Listing blobs on container [%s] ...\n", containerName)
pager := client.NewListBlobsFlatPager(containerName, options)
for pager.More() {
resp, err := pager.NextPage(ctx)
if err != nil {
panic(err)
}
for _, _blob := range resp.Segment.BlobItems {
fmt.Printf("%s\n", *_blob.Name)
}
}
}
func ReadFromStorage(containerName string, blobName string) []byte {
resp, err := client.DownloadStream(ctx, containerName, blobName, nil)
if err != nil {
panic(err)
}
blobData, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
return blobData
}
func WriteToStorage() {
//TODO: Implements
}
/*
jsonString must be formatted like that :
[{},{},{}] with each object inside the array having the properties as named on the Transaction type of the types.go file
*/
func JsonDataToTransactions(jsonString []byte) []Transaction {
var transactions []Transaction
err = json.Unmarshal(jsonString, &transactions)
if err != nil {
panic(err)
}
return transactions
}
package types package helper
import "fmt" import "fmt"
......
package main
import (
azblob "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
var client *azblob.Client
var err error
func connectToStorage(connectionString string) {
client, err = azblob.NewClientFromConnectionString(connectionString, nil)
if err != nil {
panic(err)
}
}
func readFromStorage() {
//TODO: Implements
}
func writeToStorage() {
//TODO: Implements
}
No preview for this file type
...@@ -3,8 +3,9 @@ package main ...@@ -3,8 +3,9 @@ package main
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
dotenv "github.com/joho/godotenv"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
types "local/types" helper "local/helper"
"net" "net"
"os" "os"
) )
...@@ -12,14 +13,14 @@ import ( ...@@ -12,14 +13,14 @@ import (
type Config struct { type Config struct {
Id int `yaml:"id"` Id int `yaml:"id"`
Address string `yaml:"address"` Address string `yaml:"address"`
Neighbours []types.Node `yaml:"neighbours"` Neighbours []helper.Node `yaml:"neighbours"`
} }
var transactions []types.Transaction var transactions []helper.Transaction
var config Config var config Config
var node types.CurrentNode var node helper.CurrentNode
const ( const (
ServerPort = "8017" ServerPort = "8017"
...@@ -30,10 +31,14 @@ var server net.Listener ...@@ -30,10 +31,14 @@ var server net.Listener
var proactive string var proactive string
func main() { func main() {
dotenv.Load()
args := os.Args args := os.Args
yaml := fmt.Sprintf("../neighbour-%s.yaml", args[1]) yaml := fmt.Sprintf("../neighbour-%s.yaml", args[1])
config := parseYAML(yaml) config := parseYAML(yaml)
initNodeFromConfig(config) initNodeFromConfig(config)
connectionString := os.Getenv("AZ_STORAGE_CONNECTION_STRING")
helper.ConnectToStorage(connectionString)
fmt.Printf("Loaded yaml file: %s\n", yaml) fmt.Printf("Loaded yaml file: %s\n", yaml)
...@@ -59,7 +64,7 @@ func main() { ...@@ -59,7 +64,7 @@ func main() {
} }
func initNodeFromConfig(config Config) { func initNodeFromConfig(config Config) {
node = types.CurrentNode{ node = helper.CurrentNode{
Address: config.Address, Address: config.Address,
Neighbours: config.Neighbours, Neighbours: config.Neighbours,
Reached: false, Reached: false,
...@@ -77,7 +82,7 @@ func processClient(connection net.Conn) { ...@@ -77,7 +82,7 @@ func processClient(connection net.Conn) {
fmt.Println("Error reading:", err.Error()) fmt.Println("Error reading:", err.Error())
} }
var m types.Message var m helper.Message
err = json.Unmarshal(buffer[:mlen], &m) err = json.Unmarshal(buffer[:mlen], &m)
if err != nil { if err != nil {
panic(err) panic(err)
...@@ -86,10 +91,10 @@ func processClient(connection net.Conn) { ...@@ -86,10 +91,10 @@ func processClient(connection net.Conn) {
fmt.Printf("%s\n", m.String()) fmt.Printf("%s\n", m.String())
switch m.Action { switch m.Action {
case types.MCreateTransaction: case helper.MCreateTransaction:
createTransaction(connection, m.Transaction) createTransaction(connection, m.Transaction)
break break
case types.MListTransactions: case helper.MListTransactions:
listTransactions(connection) listTransactions(connection)
break break
default: default:
...@@ -113,7 +118,7 @@ func parseYAML(file string) Config { ...@@ -113,7 +118,7 @@ func parseYAML(file string) Config {
return config return config
} }
func createTransaction(connection net.Conn, t types.Transaction) { func createTransaction(connection net.Conn, t helper.Transaction) {
if !isTransactionKnown(t) { if !isTransactionKnown(t) {
transactions = append(transactions, t) transactions = append(transactions, t)
broadcastTransaction(connection, t) broadcastTransaction(connection, t)
...@@ -121,8 +126,8 @@ func createTransaction(connection net.Conn, t types.Transaction) { ...@@ -121,8 +126,8 @@ func createTransaction(connection net.Conn, t types.Transaction) {
} }
func listTransactions(connection net.Conn) { func listTransactions(connection net.Conn) {
m := types.Message{ m := helper.Message{
Action: types.MListTransactions, Action: helper.MListTransactions,
Proactive: proactive, Proactive: proactive,
Transactions: transactions, Transactions: transactions,
} }
...@@ -135,7 +140,7 @@ func listTransactions(connection net.Conn) { ...@@ -135,7 +140,7 @@ func listTransactions(connection net.Conn) {
defer connection.Close() defer connection.Close()
} }
func broadcastTransaction(connection net.Conn, t types.Transaction) { func broadcastTransaction(connection net.Conn, t helper.Transaction) {
fmt.Printf("Starting transaction broadcast\n") fmt.Printf("Starting transaction broadcast\n")
sendTransactionToNeighbours(t) sendTransactionToNeighbours(t)
...@@ -145,21 +150,21 @@ func broadcastTransaction(connection net.Conn, t types.Transaction) { ...@@ -145,21 +150,21 @@ func broadcastTransaction(connection net.Conn, t types.Transaction) {
} }
func sendTransactionToNeighbours(t types.Transaction) { func sendTransactionToNeighbours(t helper.Transaction) {
for _, n := range node.Neighbours { for _, n := range node.Neighbours {
sendTransactionToServer(t, n.Address) sendTransactionToServer(t, n.Address)
} }
} }
func sendTransactionToServer(t types.Transaction, address string) { func sendTransactionToServer(t helper.Transaction, address string) {
fmt.Printf("Sending transaction %s to server [%s]\n", t.String(), address) fmt.Printf("Sending transaction %s to server [%s]\n", t.String(), address)
connection, err := net.Dial(ServerType, fmt.Sprintf("%s:%s", address, ServerPort)) connection, err := net.Dial(ServerType, fmt.Sprintf("%s:%s", address, ServerPort))
if err != nil { if err != nil {
panic(err) panic(err)
} }
m := types.Message{ m := helper.Message{
Action: types.MCreateTransaction, Action: helper.MCreateTransaction,
Transaction: t, Transaction: t,
Proactive: proactive, Proactive: proactive,
} }
...@@ -172,7 +177,7 @@ func sendTransactionToServer(t types.Transaction, address string) { ...@@ -172,7 +177,7 @@ func sendTransactionToServer(t types.Transaction, address string) {
} }
func isTransactionKnown(t types.Transaction) bool { func isTransactionKnown(t helper.Transaction) bool {
for _, transaction := range transactions { for _, transaction := range transactions {
if transaction.Id == t.Id { if transaction.Id == t.Id {
fmt.Printf("Transaction already exists\n") fmt.Printf("Transaction already exists\n")
......
{
"transactions": [
{
"id": 1,
"from": "Peiry",
"to": "Troller",
"amount": 6000
},
{
"id": 2,
"from": "Birner",
"to": "Peiry",
"amount": 2000
}
]
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment