Advertisement
Guest User

Untitled

a guest
Aug 29th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 3.92 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "database/sql"
  5.     "flag"
  6.     "fmt"
  7.     "github.com/gorilla/mux"
  8.     "log"
  9.     "repo.inplayer.com/workshop/Unsolved_Problems/ClashRoyal/pkg/get"
  10.     "repo.inplayer.com/workshop/Unsolved_Problems/ClashRoyal/pkg/locations"
  11.     "repo.inplayer.com/workshop/Unsolved_Problems/ClashRoyal/pkg/parser"
  12.     "repo.inplayer.com/workshop/Unsolved_Problems/ClashRoyal/pkg/routeranddb"
  13.     "repo.inplayer.com/workshop/Unsolved_Problems/ClashRoyal/pkg/update"
  14.     "time"
  15. )
  16.  
  17.  
  18. func handleErr(err error){
  19.     if(err!=nil){
  20.         log.Println(err)
  21.     }
  22. }
  23.  
  24. //enterFlags flags for DbName UserName and Password
  25. func enterFlags() (string,string,string) {
  26.  
  27.     DbName := flag.String("database", "Clash_Royale", "the name of you database")
  28.  
  29.     UserName := flag.String("username", "root", "the username to make a connection to the database")
  30.  
  31.     Password := flag.String("password", "12345", "the password for your username to make a conection to the database")
  32.  
  33.     flag.Parse()
  34.  
  35.     return *DbName,*UserName,*Password
  36. }
  37.  
  38. //Possible of failing in some very specific edge cases (first data processing has finished before second request is made)
  39. func dailyUpdate(db *sql.DB){
  40.  
  41.     done := make(chan interface{})
  42.     defer close(done)
  43.  
  44.     start := make(chan bool)
  45.     defer close(start)
  46.  
  47.     isStarted := false
  48.  
  49.     countFinished := 0
  50.     //Section 1 - Update for locations table
  51.     log.Println("Updating all locations data")
  52.     allLocations,err := locations.DailyUpdateLocations(db)
  53.     log.Println("Finished updating locations data")
  54.     handleErr(err)
  55.  
  56.  
  57.     //Section 2 - Update players from locations table
  58.     go func(){
  59.         for _, elem := range allLocations.Location {
  60.             playerTags, err := locations.GetPlayerTagsPerLocation(elem.ID)
  61.             for ; countFinished >= 40; {
  62.                 time.Sleep(time.Second * 5)
  63.             }
  64.             handleErr(err)
  65.  
  66.             if elem.IsCountry {
  67.  
  68.                 log.Println("Updating players for country -> ", elem.Name)
  69.  
  70.                 go update.Players(db, parser.ToUrlTags(playerTags.GetTags()), elem.ID, done)
  71.                 countFinished++
  72.  
  73.                 if isStarted==false{
  74.                     isStarted=true
  75.                     start<-true
  76.                 }
  77.  
  78.             }
  79.  
  80.         }
  81.     }()
  82.     <-start
  83.     log.Println("Ready for information through done for locations ...")
  84.     for ;countFinished>0;countFinished--{
  85.         log.Println("Finished Updating for location ",<-done )
  86.     }
  87.     isStarted = false
  88.  
  89.     //Section 3 - Update players from clans table
  90.     allClans,err := update.GetAllClans(db)
  91.     handleErr(err)
  92.     log.Println("Refreshing data for all clans present in the database")
  93.     go func() {
  94.         for _, elem := range allClans {
  95.             for ; countFinished >= 40; {
  96.                 time.Sleep(time.Second * 5)
  97.             }
  98.             clan := get.GetTagByClans(parser.ToUrlTag(elem.Tag))
  99.             log.Println("Updating players for clan ->", elem.Name)
  100.             countFinished++
  101.             go update.Players(db, clan, 0, done)
  102.             if isStarted == false {
  103.                 isStarted = true
  104.                 start <- true
  105.             }
  106.         }
  107.     }()
  108.     <-start
  109.     log.Println("Ready for information through done for clans ...")
  110.     for ;countFinished>0;countFinished--{
  111.         log.Println("Finished Updating for clan ",<-done )
  112.     }
  113. }
  114.  
  115.  
  116. func main (){
  117.  
  118.     dbName,userName,password:=enterFlags()
  119.  
  120.     connectionString := fmt.Sprintf("%s:%s@/%s", userName, password, dbName)
  121.     fmt.Println("Connection string =",connectionString)
  122.     db,err := sql.Open("mysql", connectionString)
  123.  
  124.     if err != nil {
  125.         panic(err)    }
  126.  
  127.     router := mux.NewRouter()
  128.  
  129.     var app routeranddb.App
  130.  
  131.     app.Initialize(db,router)
  132.  
  133.     dailyUpdate(db)
  134.  
  135.  
  136.     //ushte da se koristi bazata
  137.  
  138.     //loc,err:=locations.GetLocations()
  139.     //
  140.     //if err!=nil {
  141.     //  panic(err)
  142.     //}
  143.     //
  144.     //locationsMap:=locations.LocationMap(loc)
  145.     //
  146.     //mkdID:=locationsMap["Albania"]
  147.     //
  148.     //fmt.Println(mkdID)
  149.     //
  150.     //playerTags,err:=locations.GetPlayerTagsPerLocation(mkdID)
  151.     //
  152.     //if err!=nil{
  153.     //  panic(err)
  154.     //}
  155.     //
  156.     //tagsFromLoc:=parser.ToUrlTags(playerTags.GetTags())
  157.     //
  158.     ////fmt.Println(tags)
  159.     //
  160.     //tagsFromClan := get.GetTagByClans(parser.ToUrlTag("#2LQGYRV"))
  161.     //
  162.     //sortplayers.ByWins(tagsFromClan)
  163.     //
  164.     //sortplayers.ByWins(tagsFromLoc)
  165.  
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement