Exemplo n.º 1
0
        private PublishedWorkbookResult PublishMultiPart(PublishWorkbookRequest publishRequest)
        {
            PublishedWorkbookResult publishedWorkbookResult = new PublishedWorkbookResult(publishRequest);

            try
            {
                // request a new upload session
                var session = this.InitiateFileUpload(publishRequest);

                // upload parts until there are no parts left to upload
                using (FileStream fs = new FileStream(publishRequest.FilePath, FileMode.Open, FileAccess.Read))
                {
                    while (fs.Position < fs.Length)
                    {
                        this.AppendToFileUpload(publishRequest, session, fs);
                    }
                }

                // Finish file upload
                var workbook = this.FinishUploadAndPublishWorkbook(publishRequest, session);

                publishedWorkbookResult.IsSuccessful = true;
                publishedWorkbookResult.WorkbookId   = workbook.id;
                publishedWorkbookResult.Uri          = GetWorkbookUrl(workbook.contentUrl);
            }
            catch (Exception ex)
            {
                publishedWorkbookResult.IsSuccessful = false;
                publishedWorkbookResult.ErrorMessage = ex.Message;
            }

            return(publishedWorkbookResult);
        }
Exemplo n.º 2
0
        protected PublishedWorkbookResult PublishWorkbook(IRestApiRequestor requestor, string pluginName, string workbookPath)
        {
            var workbookFilename = Path.GetFileName(workbookPath);

            Log.InfoFormat("Publishing workbook '{0}' to {1}..", workbookFilename, tableauConnectionInfo.Uri);

            var publishWorkbookRequest = new PublishWorkbookRequest(workbookPath)
            {
                PluginName  = pluginName,
                SiteId      = siteId,
                SiteName    = tableauConnectionInfo.Site,
                ProjectId   = projectId,
                ProjectName = publishingOptions.ProjectName,
                // Tag the workbook with the name of the plugin that generated it.
                Tags = new HashSet <string>(publishingOptions.Tags)
                {
                    pluginName
                },
                OverwriteExistingWorkbook = publishingOptions.OverwriteExistingWorkbooks,
                ShowSheetsAsTabs          = true,
                PublishingTimeoutSeconds  = tableauConnectionInfo.PublishingTimeoutSeconds
            };

            postgresConnectionInfo.MatchSome(user =>
            {
                publishWorkbookRequest.DatasourceUserName = user.Username;
                publishWorkbookRequest.DatasourcePassword = user.Password;
            });

            PublishedWorkbookResult result = requestor.PublishWorkbookWithEmbeddedCredentials(publishWorkbookRequest);
            int attemptsMade = 1;

            while (!result.IsSuccessful && attemptsMade < WorkbookPublishingMaxAttempts)
            {
                Log.WarnFormat("Workbook publishing attempt #{0} failed.  Retrying in {1} {2}..",
                               attemptsMade, WorkbookPublishingRetryDelaySec, "second".Pluralize(WorkbookPublishingRetryDelaySec));
                Thread.Sleep(1000 * WorkbookPublishingRetryDelaySec);

                result = requestor.PublishWorkbookWithEmbeddedCredentials(publishWorkbookRequest);
                attemptsMade++;
            }

            if (!result.IsSuccessful)
            {
                Log.ErrorFormat("Publishing of workbook '{0}' failed: {1} [{2} {3} made]", workbookFilename, result.ErrorMessage, attemptsMade, "attempt".Pluralize(attemptsMade));
            }

            return(result);
        }
Exemplo n.º 3
0
        protected PublishedWorkbookResult PublishWorkbook(RestApiRequestor requestor, string pluginName, string workbookPath, bool overwriteExistingWorkbook = true)
        {
            var workbookFilename = Path.GetFileName(workbookPath);

            // Tag the workbook with the name of the plugin that generated it.
            logsharkRequest.WorkbookTags.Add(pluginName);

            Log.InfoFormat("Publishing workbook '{0}' to {1}..", workbookFilename, tableauConnectionInfo.ToUri());

            var publishWorkbookRequest = new PublishWorkbookRequest(workbookPath)
            {
                PluginName         = pluginName,
                SiteId             = siteId,
                SiteName           = tableauConnectionInfo.Site,
                ProjectId          = projectId,
                ProjectName        = logsharkRequest.ProjectName,
                DatasourceUserName = postgresConnectionInfo.Username,
                DatasourcePassword = postgresConnectionInfo.Password,
                Tags = logsharkRequest.WorkbookTags,
                OverwriteExistingWorkbook = overwriteExistingWorkbook,
                ShowSheetsAsTabs          = true,
                publishingTimeoutSeconds  = tableauConnectionInfo.PublishingTimeoutSeconds
            };

            PublishedWorkbookResult result = requestor.PublishWorkbookWithEmbeddedCredentials(publishWorkbookRequest);
            int attemptsMade = 1;

            while (!result.IsSuccessful && attemptsMade < CoreConstants.WORKBOOK_PUBLISHING_MAX_ATTEMPTS)
            {
                Log.WarnFormat("Workbook publishing attempt #{0} failed.  Retrying in {1} {2}..",
                               attemptsMade, CoreConstants.WORKBOOK_PUBLISHING_RETRY_DELAY_SEC, "second".Pluralize(CoreConstants.WORKBOOK_PUBLISHING_RETRY_DELAY_SEC));
                Thread.Sleep(1000 * CoreConstants.WORKBOOK_PUBLISHING_RETRY_DELAY_SEC);

                result = requestor.PublishWorkbookWithEmbeddedCredentials(publishWorkbookRequest);
                attemptsMade++;
            }

            if (!result.IsSuccessful)
            {
                Log.ErrorFormat("Publishing of workbook '{0}' failed: {1} [{2} {3} made]", workbookFilename, result.ErrorMessage, attemptsMade, "attempt".Pluralize(attemptsMade));
            }

            return(result);
        }
Exemplo n.º 4
0
        private PublishedWorkbookResult Publish(PublishWorkbookRequest publishRequest)
        {
            PublishedWorkbookResult publishedWorkbookResult = new PublishedWorkbookResult(publishRequest);

            try
            {
                var workbook = PublishWorkbook(publishRequest);

                publishedWorkbookResult.IsSuccessful = true;
                publishedWorkbookResult.WorkbookId   = workbook.id;
                publishedWorkbookResult.Uri          = GetWorkbookUrl(workbook.contentUrl);
            }
            catch (Exception ex)
            {
                publishedWorkbookResult.IsSuccessful = false;
                publishedWorkbookResult.ErrorMessage = ex.Message;
            }

            return(publishedWorkbookResult);
        }
Exemplo n.º 5
0
 public LogsharkPublishedWorkbookMetadata(PublishedWorkbookResult publishedWorkbook, LogsharkRunMetadata runMetadata, TableauServerConnectionInfo tableauConnectionInfo)
 {
     this.runMetadata       = runMetadata;
     Hostname               = tableauConnectionInfo.Hostname;
     IsSuccessful           = publishedWorkbook.IsSuccessful;
     PluginName             = publishedWorkbook.Request.PluginName;
     Port                   = tableauConnectionInfo.Port;
     ProjectId              = publishedWorkbook.Request.ProjectId;
     ProjectName            = publishedWorkbook.Request.ProjectName;
     PublishingErrorMessage = publishedWorkbook.ErrorMessage;
     PublishingUsername     = tableauConnectionInfo.Username;
     SiteId                 = publishedWorkbook.Request.SiteId;
     SiteName               = publishedWorkbook.Request.SiteName;
     Tags                   = String.Join(",", publishedWorkbook.Request.Tags);
     if (publishedWorkbook.Uri != null)
     {
         Uri = publishedWorkbook.Uri.ToString();
     }
     WorkbookId   = publishedWorkbook.WorkbookId;
     WorkbookName = publishedWorkbook.Request.WorkbookName;
 }
Exemplo n.º 6
0
        protected ICollection <PublishedWorkbookResult> PublishWorkbooks(string pluginName, IEnumerable <string> workbooksToPublish)
        {
            try
            {
                InitializeProject(restApiRequestor);
            }
            catch (Exception ex)
            {
                throw new PublishingException(String.Format("Unable to initialize Tableau Server for publishing: {0}", ex.Message), ex);
            }

            // Publish all the workbooks.
            var publishedWorkbookResults = new List <PublishedWorkbookResult>();

            foreach (var workbook in workbooksToPublish)
            {
                PublishedWorkbookResult publishedWorkbookResult = PublishWorkbook(restApiRequestor, pluginName, workbook);
                publishedWorkbookResults.Add(publishedWorkbookResult);
            }

            return(publishedWorkbookResults);
        }
Exemplo n.º 7
0
 public LogsharkPublishedWorkbookMetadata(LogsharkRequest request, LogsharkRunMetadata runMetadata, PublishedWorkbookResult publishedWorkbook)
 {
     this.runMetadata = runMetadata;
     PluginName       = publishedWorkbook.Request.PluginName;
     Uri                = publishedWorkbook.Uri.ToString();
     Hostname           = request.Configuration.TableauConnectionInfo.Hostname;
     Port               = request.Configuration.TableauConnectionInfo.Port;
     PublishingUsername = request.Configuration.TableauConnectionInfo.Username;
     SiteId             = publishedWorkbook.Request.SiteId;
     SiteName           = publishedWorkbook.Request.SiteName;
     ProjectId          = publishedWorkbook.Request.ProjectId;
     ProjectName        = publishedWorkbook.Request.ProjectName;
     WorkbookId         = publishedWorkbook.WorkbookId;
     WorkbookName       = publishedWorkbook.Request.WorkbookName;
     Tags               = String.Join(",", publishedWorkbook.Request.Tags);
 }
Exemplo n.º 8
0
        public PublishedWorkbookResult PublishWorkbookWithEmbeddedCredentials(PublishWorkbookRequest publishRequest)
        {
            PublishedWorkbookResult publishedWorkbookResult = new PublishedWorkbookResult(publishRequest);

            // Construct URI & compose request payload.
            var       uri            = Endpoints.GetPublishWorkbookUri(baseUri, publishRequest.SiteId, publishRequest.OverwriteExistingWorkbook);
            tsRequest requestPayload = new tsRequest
            {
                Item = new workbookType
                {
                    name              = Path.GetFileNameWithoutExtension(publishRequest.FilePath),
                    showTabs          = publishRequest.ShowSheetsAsTabs,
                    showTabsSpecified = publishRequest.ShowSheetsAsTabs,
                    project           = new projectType
                    {
                        id = publishRequest.ProjectId
                    },
                    connectionCredentials = new connectionCredentialsType
                    {
                        name           = publishRequest.DatasourceUserName,
                        password       = publishRequest.DatasourcePassword,
                        embed          = true,
                        embedSpecified = true
                    }
                }
            };

            // Construct multipart request body using a boundary string to delimit sections.
            var    boundaryString = Guid.NewGuid().ToString().Replace("-", "");
            string contentType    = String.Format("multipart/mixed; boundary={0}", boundaryString);

            byte[] requestBody = PublishRequestBuilder.BuildRequestBody(publishRequest.FilePath, requestPayload, boundaryString);

            // Issue request.
            var        errorMessage = String.Format("Failed to publish workbook '{0}'", publishRequest.WorkbookName);
            ApiRequest apiRequest   = new ApiRequest(uri, HttpMethod.Post, GetAuthToken(), headers: null, contentType: contentType, body: requestBody, timeoutSeconds: publishRequest.publishingTimeoutSeconds);

            try
            {
                tsResponse response = apiRequest.TryIssueRequest(errorMessage);

                publishedWorkbookResult.IsSuccessful = true;
                publishedWorkbookResult.WorkbookId   = response.GetWorkbook().id;
                publishedWorkbookResult.Uri          = GetWorkbookUrl(response.GetWorkbook().contentUrl);
            }
            catch (Exception ex)
            {
                publishedWorkbookResult.IsSuccessful = false;
                publishedWorkbookResult.ErrorMessage = ex.Message;
            }

            // Add any tags to the newly-published workbook.
            if (publishedWorkbookResult.IsSuccessful)
            {
                try
                {
                    AddTagsToWorkbook(publishedWorkbookResult.WorkbookId, publishRequest.Tags);
                }
                catch
                {
                    // We swallow any errors here.
                }
            }

            return(publishedWorkbookResult);
        }