[XAPID-1070] reuse the same http client, change maxIdleConnsPerHost
diff --git a/init.go b/init.go
index 6384939..1c4e16d 100644
--- a/init.go
+++ b/init.go
@@ -21,6 +21,7 @@
 	"time"
 
 	"github.com/30x/apid-core"
+	"net/http"
 	"sync"
 )
 
@@ -40,6 +41,9 @@
 	configDownloadQueueSize          = "apigeesync_download_queue_size"
 	configBlobServerBaseURI          = "apigeesync_blob_server_base"
 	configStoragePath                = "local_storage_path"
+	maxIdleConnsPerHost              = 50
+	httpTimeout                      = time.Minute
+	configBearerToken                = "apigeesync_bearer_token"
 )
 
 var (
@@ -107,6 +111,18 @@
 
 	log.Debug("apiServerBaseURI = " + apiServerBaseURI.String())
 
+	// initialize tracker client
+	httpClient := &http.Client{
+		Transport: &http.Transport{
+			MaxIdleConnsPerHost: maxIdleConnsPerHost,
+		},
+		Timeout: httpTimeout,
+		CheckRedirect: func(req *http.Request, _ []*http.Request) error {
+			req.Header.Set("Authorization", getBearerToken())
+			return nil
+		},
+	}
+
 	// initialize db manager
 
 	dbMan := &dbManager{
@@ -149,9 +165,7 @@
 		bundleCleanupDelay:        bundleCleanupDelay,
 		downloadQueue:             make(chan *DownloadRequest, downloadQueueSize),
 		isClosed:                  new(int32),
-		client: &http.Client{
-			Timeout: bundleDownloadConnTimeout,
-		},
+		client:                    httpClient,
 	}
 
 	bundleMan.initializeBundleDownloading()
@@ -173,3 +187,7 @@
 
 	return pluginData, nil
 }
+
+func getBearerToken() string {
+	return "Bearer " + config.GetString(configBearerToken)
+}