package examples
import (
"fmt"
"github.com/bradfitz/gomemcache/memcache"
psh "github.com/platformsh/config-reader-go/v2"
gomemcache "github.com/platformsh/config-reader-go/v2/gomemcache"
)
func UsageExampleMemcached() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// Get the credentials to connect to the Solr service.
credentials, err := config.Credentials("memcached")
checkErr(err)
// Retrieve formatted credentials for gomemcache.
formatted, err := gomemcache.FormattedCredentials(credentials)
checkErr(err)
// Connect to Memcached.
mc := memcache.New(formatted)
// Set a value.
key := "Deploy_day"
value := "Friday"
err = mc.Set(&memcache.Item{Key: key, Value: []byte(value)})
// Read it back.
test, err := mc.Get(key)
return fmt.Sprintf("Found value <strong>%s</strong> for key <strong>%s</strong>.", test.Value, key)
}
package examples
import (
"context"
"fmt"
psh "github.com/platformsh/config-reader-go/v2"
mongoPsh "github.com/platformsh/config-reader-go/v2/mongo"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"time"
)
func UsageExampleMongoDB() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// Get the credentials to connect to the Solr service.
credentials, err := config.Credentials("mongodb")
checkErr(err)
// Retrieve the formatted credentials for mongo-driver.
formatted, err := mongoPsh.FormattedCredentials(credentials)
checkErr(err)
// Connect to MongoDB using the formatted credentials.
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
client, err := mongo.Connect(ctx, options.Client().ApplyURI(formatted))
checkErr(err)
// Create a new collection.
collection := client.Database("main").Collection("starwars")
// Clean up after ourselves.
err = collection.Drop(context.Background())
checkErr(err)
// Create an entry.
res, err := collection.InsertOne(ctx, bson.M{"name": "Rey", "occupation": "Jedi"})
checkErr(err)
id := res.InsertedID
// Read it back.
cursor, err := collection.Find(context.Background(), bson.M{"_id": id})
checkErr(err)
var name string
var occupation string
for cursor.Next(context.Background()) {
document := struct {
Name string
Occupation string
}{}
err := cursor.Decode(&document)
checkErr(err)
name = document.Name
occupation = document.Occupation
}
return fmt.Sprintf("Found %s (%s)", name, occupation)
}
package examples
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
psh "github.com/platformsh/config-reader-go/v2"
sqldsn "github.com/platformsh/config-reader-go/v2/sqldsn"
)
func UsageExampleMySQL() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// The 'database' relationship is generally the name of the primary SQL database of an application.
// That's not required, but much of our default automation code assumes it.
credentials, err := config.Credentials("database")
checkErr(err)
// Using the sqldsn formatted credentials package.
formatted, err := sqldsn.FormattedCredentials(credentials)
checkErr(err)
db, err := sql.Open("mysql", formatted)
checkErr(err)
defer db.Close()
// Force MySQL into modern mode.
db.Exec("SET NAMES=utf8")
db.Exec("SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES," +
"NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO," +
"NO_AUTO_CREATE_USER,ONLY_FULL_GROUP_BY'")
// Creating a table.
sqlCreate := "CREATE TABLE IF NOT EXISTS People (" +
"id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY," +
"name VARCHAR(30) NOT NULL," +
"city VARCHAR(30) NOT NULL)"
_, err = db.Exec(sqlCreate)
checkErr(err)
// Insert data.
sqlInsert := "INSERT INTO People (name, city) VALUES" +
"('Neil Armstrong', 'Moon')," +
"('Buzz Aldrin', 'Glen Ridge')," +
"('Sally Ride', 'La Jolla');"
_, err = db.Exec(sqlInsert)
checkErr(err)
table := "<table>" +
"<thead>" +
"<tr><th>Name</th><th>City</th></tr>" +
"</thead>" +
"<tbody>"
var id int
var name string
var city string
rows, err := db.Query("SELECT * FROM People")
if err != nil {
panic(err)
} else {
for rows.Next() {
err = rows.Scan(&id, &name, &city)
checkErr(err)
table += fmt.Sprintf("<tr><td>%s</td><td>%s</td><tr>\n", name, city)
}
table += "</tbody>\n</table>\n"
}
_, err = db.Exec("DROP TABLE People;")
checkErr(err)
return table
}
| Name | City |
|---|---|
| Neil Armstrong | Moon |
| Buzz Aldrin | Glen Ridge |
| Sally Ride | La Jolla |
package examples
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
psh "github.com/platformsh/config-reader-go/v2"
libpq "github.com/platformsh/config-reader-go/v2/libpq"
)
func UsageExamplePostgreSQL() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// The 'database' relationship is generally the name of the primary SQL database of an application.
// It could be anything, though, as in the case here where it's called "postgresql".
credentials, err := config.Credentials("postgresql")
checkErr(err)
// Retrieve the formatted credentials.
formatted, err := libpq.FormattedCredentials(credentials)
checkErr(err)
// Connect.
db, err := sql.Open("postgres", formatted)
checkErr(err)
defer db.Close()
// Creating a table.
sqlCreate := "CREATE TABLE IF NOT EXISTS PeopleGo (" +
"id SERIAL PRIMARY KEY," +
"name VARCHAR(30) NOT NULL," +
"city VARCHAR(30) NOT NULL);"
_, err = db.Exec(sqlCreate)
checkErr(err)
// Insert data.
sqlInsert := "INSERT INTO PeopleGo(name, city) VALUES" +
"('Neil Armstrong', 'Moon')," +
"('Buzz Aldrin', 'Glen Ridge')," +
"('Sally Ride', 'La Jolla');"
_, err = db.Exec(sqlInsert)
checkErr(err)
table := "<table>" +
"<thead>" +
"<tr><th>Name</th><th>City</th></tr>" +
"</thead>" +
"<tbody>"
var id int
var name string
var city string
// Read it back.
rows, err := db.Query("SELECT * FROM PeopleGo")
if err != nil {
panic(err)
} else {
for rows.Next() {
err = rows.Scan(&id, &name, &city)
checkErr(err)
table += fmt.Sprintf("<tr><td>%s</td><td>%s</td><tr>\n", name, city)
}
table += "</tbody>\n</table>\n"
}
_, err = db.Exec("DROP TABLE PeopleGo;")
checkErr(err)
return table
}
| Name | City |
|---|---|
| Neil Armstrong | Moon |
| Buzz Aldrin | Glen Ridge |
| Sally Ride | La Jolla |
package examples
import (
"fmt"
psh "github.com/platformsh/config-reader-go/v2"
amqpPsh "github.com/platformsh/config-reader-go/v2/amqp"
"github.com/streadway/amqp"
"sync"
)
func UsageExampleRabbitMQ() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// Get the credentials to connect to RabbitMQ.
credentials, err := config.Credentials("rabbitmq")
checkErr(err)
// Use the amqp formatted credentials package.
formatted, err := amqpPsh.FormattedCredentials(credentials)
checkErr(err)
// Connect to the RabbitMQ server.
connection, err := amqp.Dial(formatted)
checkErr(err)
defer connection.Close()
// Make a channel.
channel, err := connection.Channel()
checkErr(err)
defer channel.Close()
// Create a queue.
q, err := channel.QueueDeclare(
"deploy_days", // name
false, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
body := "Friday"
msg := fmt.Sprintf("Deploying on %s", body)
// Publish a message.
err = channel.Publish(
"", // exchange
q.Name, // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(msg),
})
checkErr(err)
outputMSG := fmt.Sprintf("[x] Sent '%s' <br>", body)
// Consume the message.
msgs, err := channel.Consume(
q.Name, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
checkErr(err)
var received string
var wg sync.WaitGroup
wg.Add(1)
go func() {
for d := range msgs {
received = fmt.Sprintf("[x] Received message: '%s' <br>", d.Body)
wg.Done()
}
}()
wg.Wait()
outputMSG += received
return outputMSG
}
package examples
import (
"fmt"
psh "github.com/platformsh/config-reader-go/v2"
gosolr "github.com/platformsh/config-reader-go/v2/gosolr"
solr "github.com/rtt/Go-Solr"
)
func UsageExampleSolr() string {
// Create a NewRuntimeConfig object to ease reading the Platform.sh environment variables.
// You can alternatively use os.Getenv() yourself.
config, err := psh.NewRuntimeConfig()
checkErr(err)
// Get the credentials to connect to the Solr service.
credentials, err := config.Credentials("solr")
checkErr(err)
// Retrieve Solr formatted credentials.
formatted, err := gosolr.FormattedCredentials(credentials)
checkErr(err)
// Connect to Solr using the formatted credentials.
connection := &solr.Connection{URL: formatted}
// Add a document and commit the operation.
docAdd := map[string]interface{}{
"add": []interface{}{
map[string]interface{}{"id": 123, "name": "Valentina Tereshkova"},
},
}
respAdd, err := connection.Update(docAdd, true)
checkErr(err)
// Select the document.
q := &solr.Query{
Params: solr.URLParamMap{
"q": []string{"id:123"},
},
}
resSelect, err := connection.CustomSelect(q, "query")
checkErr(err)
// Delete the document and commit the operation.
docDelete := map[string]interface{}{
"delete": map[string]interface{}{
"id": 123,
},
}
resDel, err := connection.Update(docDelete, true)
checkErr(err)
message := fmt.Sprintf("Adding one document - %s<br>"+
"Selecting document (1 expected): %d<br>"+
"Deleting document - %s<br>",
respAdd, resSelect.Results.NumFound, resDel)
return message
}