mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
MVP Version of module
This commit is contained in:
parent
9e06c2b0e5
commit
2c0c7f2fdb
BIN
test_builds/wtf
Executable file
BIN
test_builds/wtf
Executable file
Binary file not shown.
3
wtf.go
3
wtf.go
@ -46,6 +46,7 @@ import (
|
|||||||
"github.com/senorprogrammer/wtf/weatherservices/prettyweather"
|
"github.com/senorprogrammer/wtf/weatherservices/prettyweather"
|
||||||
"github.com/senorprogrammer/wtf/weatherservices/weather"
|
"github.com/senorprogrammer/wtf/weatherservices/weather"
|
||||||
"github.com/senorprogrammer/wtf/wtf"
|
"github.com/senorprogrammer/wtf/wtf"
|
||||||
|
"github.com/senorprogrammer/wtf/zendesk"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Config *config.Config
|
var Config *config.Config
|
||||||
@ -229,6 +230,8 @@ func addWidget(app *tview.Application, pages *tview.Pages, widgetName string) {
|
|||||||
Widgets = append(Widgets, trello.NewWidget())
|
Widgets = append(Widgets, trello.NewWidget())
|
||||||
case "weather":
|
case "weather":
|
||||||
Widgets = append(Widgets, weather.NewWidget(app, pages))
|
Widgets = append(Widgets, weather.NewWidget(app, pages))
|
||||||
|
case "zendesk":
|
||||||
|
Widgets = append(Widgets, zendesk.NewWidget())
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
68
zendesk/client.go
Normal file
68
zendesk/client.go
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package zendesk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Resource struct {
|
||||||
|
//Headers http.Header
|
||||||
|
Response interface{}
|
||||||
|
Raw string
|
||||||
|
}
|
||||||
|
|
||||||
|
var a = os.Getenv("ZENDESK_API")
|
||||||
|
var username = os.Getenv("ZENDESK_USERNAME")
|
||||||
|
var subdomain = os.Getenv("ZENDESK_SUBDOMAIN")
|
||||||
|
var baseURL = fmt.Sprintf("https://%v.zendesk.com/api/v2", subdomain)
|
||||||
|
|
||||||
|
func errHandler(err error) {
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildUrl(baseURL string) string {
|
||||||
|
ticketURL := baseURL + "/tickets.json?sort_by=status"
|
||||||
|
return ticketURL
|
||||||
|
}
|
||||||
|
|
||||||
|
func api(key string, meth string, path string, params string) (*Resource, error) {
|
||||||
|
|
||||||
|
trn := &http.Transport{}
|
||||||
|
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: trn,
|
||||||
|
}
|
||||||
|
|
||||||
|
var URL = buildUrl(baseURL)
|
||||||
|
|
||||||
|
req, err := http.NewRequest(meth, URL, bytes.NewBufferString(params))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Header.Add("Content-Type", "application/json")
|
||||||
|
|
||||||
|
apiUser := fmt.Sprintf("%v/token", username)
|
||||||
|
req.SetBasicAuth(apiUser, key)
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
data, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Resource{Response: &resp, Raw: string(data)}, nil
|
||||||
|
|
||||||
|
}
|
104
zendesk/tickets.go
Normal file
104
zendesk/tickets.go
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
package zendesk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TicketArray struct {
|
||||||
|
Count int `json:"count"`
|
||||||
|
Created string `json:"created"`
|
||||||
|
Next_page string `json:"next_page"`
|
||||||
|
Previous_page string `json:"previous_page"`
|
||||||
|
Tickets []Ticket
|
||||||
|
}
|
||||||
|
|
||||||
|
type SingleTicket struct {
|
||||||
|
Ticket *Ticket `json:"ticket"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Ticket struct {
|
||||||
|
Id uint64 `json:"id"`
|
||||||
|
URL string `json:"url"`
|
||||||
|
ExternalId string `json:"external_id"`
|
||||||
|
CreatedAt string `json:"created_at"`
|
||||||
|
UpdatedAt string `json:"updated_at"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Subject string `json:"subject"`
|
||||||
|
RawSubject string `json:"raw_subject"`
|
||||||
|
Description string `json:"description"`
|
||||||
|
Priority string `json:"priority"`
|
||||||
|
Status string `json:"status"`
|
||||||
|
Recipient string `json:"recipient"`
|
||||||
|
RequesterId uint32 `json:"requester_id"`
|
||||||
|
SubmitterId uint32 `json:"submitter_id"`
|
||||||
|
AssigneeId uint32 `json:"assignee_id"`
|
||||||
|
OrganizationId uint32 `json:"organization_id"`
|
||||||
|
GroupId uint32 `json:"group_id"`
|
||||||
|
CollaboratorIds []int32 `json:"collaborator_ids"`
|
||||||
|
ForumTopicId uint32 `json:"forum_topic_id"`
|
||||||
|
ProblemId uint32 `json:"problem_id"`
|
||||||
|
HasIncidents bool `json:"has_incidents"`
|
||||||
|
DueAt string `json:"due_at"`
|
||||||
|
Tags []string `json:"tags"`
|
||||||
|
Satisfaction_rating string `json:"satisfaction_rating"`
|
||||||
|
Ticket_form_id uint32 `json:"ticket_form_id"`
|
||||||
|
Sharing_agreement_ids interface{} `json:"sharing_agreement_ids"`
|
||||||
|
Via interface{} `json:"via"`
|
||||||
|
Custom_Fields interface{} `json:"custom_fields"`
|
||||||
|
Fields interface{} `json:"fields"`
|
||||||
|
}
|
||||||
|
|
||||||
|
//var a = os.Getenv("ZENDESK_API")
|
||||||
|
|
||||||
|
func listTickets(pag ...string) (*TicketArray, error) {
|
||||||
|
|
||||||
|
TicketStruct := &TicketArray{}
|
||||||
|
|
||||||
|
var path string
|
||||||
|
if len(pag) < 1 {
|
||||||
|
path = "/tickets.json"
|
||||||
|
} else {
|
||||||
|
path = pag[0]
|
||||||
|
}
|
||||||
|
resource, err := api(a, "GET", path, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
json.Unmarshal([]byte(resource.Raw), TicketStruct)
|
||||||
|
|
||||||
|
return TicketStruct, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTickets() ([]string, error) {
|
||||||
|
var newTickets []string
|
||||||
|
tickets, err := listTickets()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
for i := range tickets.Tickets {
|
||||||
|
if tickets.Tickets[i].Status == "new" {
|
||||||
|
requester := tickets.Tickets[i].Via
|
||||||
|
req, _ := requester.(map[string]interface{})
|
||||||
|
source := req["source"]
|
||||||
|
fromMap, _ := source.(map[string]interface{})
|
||||||
|
from := fromMap["from"]
|
||||||
|
fromValue, _ := from.(map[string]interface{})
|
||||||
|
name := fromValue["name"]
|
||||||
|
|
||||||
|
newTicket := fmt.Sprintf("%v - %v - %v - %v", tickets.Tickets[i].Id, tickets.Tickets[i].Status, tickets.Tickets[i].Subject, name)
|
||||||
|
newTickets = append(newTickets, newTicket)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(newTickets) < 1 {
|
||||||
|
fmt.Println("No unassigned tickets in queue - woop!!")
|
||||||
|
} else {
|
||||||
|
for i := range newTickets {
|
||||||
|
fmt.Println(newTickets[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newTickets, nil
|
||||||
|
}
|
48
zendesk/widget.go
Normal file
48
zendesk/widget.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package zendesk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/senorprogrammer/wtf/wtf"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Widget struct {
|
||||||
|
wtf.TextWidget
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWidget() *Widget {
|
||||||
|
widget := Widget{
|
||||||
|
TextWidget: wtf.NewTextWidget(" Zendesk ", "zendesk", false),
|
||||||
|
}
|
||||||
|
|
||||||
|
return &widget
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------- Exported Functions -------------------- */
|
||||||
|
func (widget *Widget) Refresh() {
|
||||||
|
tickets, err := newTickets()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
widget.UpdateRefreshedAt()
|
||||||
|
|
||||||
|
widget.View.SetTitle(fmt.Sprintf("%s (%d)", widget.Name, len(tickets)))
|
||||||
|
widget.View.SetText(widget.textContent(tickets))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------- Unexported Functions -------------------- */
|
||||||
|
|
||||||
|
func (widget *Widget) textContent(items []string) string {
|
||||||
|
if len(items) == 0 {
|
||||||
|
return fmt.Sprintf("No unassigned tickets in queue - woop!!")
|
||||||
|
}
|
||||||
|
|
||||||
|
str := ""
|
||||||
|
for i := range items {
|
||||||
|
str = items[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
return str
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user