Inconsistencies in REST for Deletes

Issue #497 resolved
Former user created an issue

I thought it best to create an issue on your site about our discussion on the Answer forum:

https://answers.atlassian.com/questions/272143/inconsistency-in-timesheet-rest

copy and paste from the link above:

I'm using Timesheet's REST in conjunction with a groovy listener to do some manipulation on hours logged, but I'm noticing an inconsistency with how time entry deletes are handled compared to adds and updates. The details:

  • The purpose of this listener is to push hours from JIRA to another time tracking system external to JIRA
  • Whenever a user adds a time entry, updates a time entry, or deletes a time entry, a listener reviews hours logged, sums up all hours logged for the day s/he is logging hours for and finally pushes that sum and associated data to a database.
  • It does so via Timesheet's REST. The URL looks something like this when the listener executes: http://rnod-ROOTURL/rest/timesheet-gadget/1.0/raw-timesheet.json?targetUser=worthar&projectid=10604&startDate=2014-03-09&endDate=2014-03-09
  • On add and update, this works as I'd expect: it provides all time entries to include the one that initiated the listener. Delete though is a problem. When the listener is executed for a delete, REST still includes the deleted value in the data set. I'm expecting it to have removed that deleted entry before it provides me all the values, but that deleted value is still included.

To me, this seems like a bug in the Timesheet add on.

Would anyone else agree? If this is expected behavior, how does the listener know which value is the value being deleted?

Comments (14)

  1. Andriy Zhdanov

    Hi Tanner,

    Thank you for duplicating issue here. However I should admit I could not figure out anything.

    When I'm trying today, I can see that response is refreshed in browser too, in both cases, when I add work log and delete, with Ctrl+R.

    Also, I've considered no-store directive, but it does not seem suitable. Though, if you let me know how do you execute rest endpoint, i.e. with which library and in what language, I may try to reproduce problem with it. And try if no-store helps. May be you can share just relevant piece of your code. Or try it yourself, plugin code is available here.

    From other hand, may be there is something in your code. Try to invoke your app without the hook from JIRA, see if it notices changes you do separately.

    As I've said, browser and curl does see the changes, so I don't think there is a bug in plugin. Moreover dashboard gadget uses the same endpoint, and it had problem before, but it was fixed, see Issue#321.

    Thank you.

  2. Former user Account Deleted

    I looked at Issue #321. It is similar. Of course, there's no browser in the way here since I'm calling REST to get the data and immediately pushing it into a database.

    I have to admit. I'm a very rusty programmer and this is my first experience with REST so I feel a bit over my head trying troubleshoot this. Additionally, I'm out on vacation all next week. my code is below. the relevant lines for this issue are on lines 45-56 and 111-116, If you don't get anywhere by the time I'm back in the office (or if this is actualy an issue in my code), I'll keep digging until I find a solution.

    Thanks for the help and thanks for a great plugin. :)

    package com.custom
    
    import com.atlassian.jira.event.issue.AbstractIssueEventListener
    import com.atlassian.jira.event.issue.IssueEvent
    import com.atlassian.jira.security.roles.ProjectRoleManager
    import com.atlassian.jira.ComponentManager
    import com.atlassian.jira.component.ComponentAccessor
    import com.atlassian.mail.server.SMTPMailServer
    import com.atlassian.mail.server.managers.OFBizMailServerManager
    import com.atlassian.jira.mail.Email
    import com.atlassian.mail.queue.SingleMailQueueItem
    import java.text.SimpleDateFormat
    import java.util.Date
    import java.util.Map
    import org.apache.log4j.Category
    import groovy.json.JsonSlurper
    import groovy.sql.Sql
    
    class HourCollector extends AbstractIssueEventListener {
            Category log = Category.getInstance(HourCollector.class)
    
        @Override
        void issueWorkLogged (IssueEvent event) {
            common(event, "logged")
        }
    
        @Override
        void issueWorklogUpdated (IssueEvent event) {
            common(event, "updated")
        }
    
        @Override
        void issueWorklogDeleted (IssueEvent event) {
            common(event, "deleted")
        }
    
        private void common (IssueEvent event, String type) {
            log.setLevel(org.apache.log4j.Level.DEBUG)
            log.debug("-------- Begin ESSHook ---------------")
    
            def urlRoot    = "http://rnod-jira01.is.ad.igt.com:8080"            // CHANGE TO PROD FOR PROMOTION
            def userName   = "automation"
            def password   = "automation"
    
            def user       = event.getUser().getName()
            def project    = event.issue.getProjectId()     
    
            def entryDate  = event.worklog.getStartDate()
            def DATE_FORMAT= "yyyy-MM-dd"
            def formatDate = new SimpleDateFormat(DATE_FORMAT)
            formatDate     = formatDate.format(entryDate)
    
            def addr       = "${urlRoot}/rest/timesheet-gadget/1.0/raw-timesheet.json?targetUser=$user&projectid=$project&startDate=$formatDate&endDate=$formatDate"
            def authString = "${userName}:${password}".getBytes().encodeBase64().toString()
            def conn       = addr.toURL().openConnection()
            conn.setRequestProperty("Authorization", "Basic ${authString}")
    
            def sql = Sql.newInstance( 'jdbc:jtds:sqlserver://RNOD-SQLD01.is.ad.igt.com/Ignite_TimeTracking_DEV', 'SQL_Ignite_TimeTracking_DEV','Y3*3591\'ht', 'net.sourceforge.jtds.jdbc.Driver' )     
            sql.withStatement { stmt -> stmt.queryTimeout = 10 }
    
            ComponentManager componentManager = ComponentManager.getInstance()
            OFBizMailServerManager mailServerManager = componentManager.getMailServerManager()
            com.atlassian.mail.server.SMTPMailServer smtp = mailServerManager.getDefaultSMTPMailServer()
    
            log.debug ("user: $user || project: $project || date: $formatDate")
            log.debug ("URL: $addr")
    
            if( conn.responseCode != 200 ) {
    
                // failed connection
                log.debug ("failed connection: ${conn.responseCode}")
                Email email = new Email("tanner.wortham@igt.com")
                email.setFrom(smtp.getDefaultFrom())
                email.setSubject("Hour Collector Failure")
                email.setBody("The hour collector failed to connect to REST.  Investigate.")
                email.setMimeType("text/html")
                SingleMailQueueItem item = new SingleMailQueueItem(email)
                try {
                    ComponentAccessor.getMailQueue().addItem(item);
                } catch (Exception e) {
                    log.warn("ERR: ERROR SENDING HOUR COLLECTION EMAIL", e);
                }
            } else {
                // get the role of the user
                ProjectRoleManager projectRoleManager = ComponentManager.getComponentInstanceOfType(ProjectRoleManager.class) as ProjectRoleManager
                def slurper      = new JsonSlurper()
                def result       = slurper.parseText(conn.content.text)
                def projectRoles = projectRoleManager.getProjectRoles(event.getUser(), event.project)
                def role
    
                projectRoles.each { p ->
                    if (p.getName() != "Administrators" && role == null) {
                        role = p.getName()
                    } else if (role != null) {
                        log.debug ("encountered multiple roles.  Sending notice.")
                        Email email = new Email ("tanner.wortham@igt.com")
                        email.setFrom(smtp.getDefaultFrom())
                        email.setSubject ("Multiple Roles - Hour Collector Failure")
                        email.setBody ("user: $user || project: ${event.project}")
                        email.setMimeType ("text/html")
                        SingleMailQueueItem item = new SingleMailQueueItem(email)
                        try {
                            ComponentAccessor.getMailQueue().addItem(item);
                        } catch (Exception e) {
                            log.warn("ERR: ERROR SENDING HOUR COLLECTION EMAIL", e);
                        }
                    }
                }
                log.debug ("${result.worklog.entries.timeSpent}")
                def totalTime = 0
                result.worklog.entries.timeSpent.each { first ->
                    // why this is nested is beyond me
                    first.each { ts ->
                        log.debug ("$ts")
                        totalTime += ts
                    }
                }
                log.debug ("push to DB: $user || $totalTime || $project || $role || $formatDate")       
    
                // begin interacting with the database
                if (rowFound (sql, user, project as Integer, formatDate)) {
                    log.debug ("row found.  need to update that row.")
                    def params = [totalTime, user, project, formatDate]
                    sql.execute "update entries set hours = ?, entereddate = getdate(), failure = null where username = ? and project = ? and hoursdate = ?", params
                } else {
                    log.debug ("row not found.  need to insert a new row.")
                    sql.execute "insert into entries values ($user, $totalTime, $formatDate, $project, $role, getdate(), NULL)"
                }
    
                sql.close()
            }
            log.debug("-------- End ESSHook ---------------")
        }
    
        private boolean rowFound (Sql sql, String userName, Integer project, String formatDate) {
            def params = [userName, project, formatDate]
            def totalRows = sql.rows("select * from entries where userName = ? and project = ? and hoursDate = ?", params)
            if (totalRows.size == 0) return false else return true      
        }
    }
    
  3. Andriy Zhdanov

    Hi Tanner,

    Sorry, I have not found time to try it out. Did you find anything by chance?

    Thank you.

  4. Former user Account Deleted

    not yet. today is my first day back in the office after a lovely honeymoon with the new wife. i have this on my radar, but i'm sure most of this week will be spent catching up on the 300 unread emails in my inbox. :)

  5. Andriy Zhdanov

    Cool, congratulations to your young family! I will let you know if I have a chance to look at it also.

  6. Former user Account Deleted

    any luck yet, @azhdanov ? i plan on spending some time now into troubleshooting the issue. if i turn anything up, i'll let you know.

  7. Former user Account Deleted

    i'm beginning to think that the delete does not happen until after the listener finishes its execution. that makes sense on some levels, but i'd imagine JIRA's own REST would have customers up in arms if it behaved in such a way. imagine the case where you deleted an issue from JIRA but then that issue still showed in the REST call immediately after. what do you think?

    i can work around the issue by way of subtracting the deleted time entry from the summed time entry; however, if you were to later address the issue in your code, i'd be subtracting time when i shouldn't be.

  8. Former user Account Deleted

    I took your suggestion and called JIRA REST in my code. I expect you have a better eye and more expertise so I'm interested in what conclusion this brings you to. A few notes about the test:

    • I used a brand new issue with no time entries, comments, etc to conduct the test.
    • I logged 1 hour to the test and then copied the REST output that you see below.
    • I then deleted that 1 hour worklog and again copied the REST output that is also below.
    • If there's a way to lessen the input, I'm unfamiliar. Here's the call to REST that I'm using now. Feel free to modify if there's an easier way to get at the data in question: ${urlRoot}/rest/api/2/issue/MISSWHITE-316

    REST output when logging an hour for issue MISSWHITE-316:

    [id:18929, expand:renderedFields,names,schema,transitions,operations,editmeta,changelog, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929, key:MISSWHITE-316, fields:[summary:t5, progress:[total:3600, progress:3600, percent:100], timetracking:[remainingEstimate:0h, remainingEstimateSeconds:0, timeSpentSeconds:3600, timeSpent:1h], issuetype:[subtask:true, id:5, description:A task that needs to be done., name:Task, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/issuetypes/subtask_alternate.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issuetype/5], votes:[hasVoted:false, votes:0, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/MISSWHITE-316/votes], customfield_11100:null, resolution:null, fixVersions:[], resolutiondate:null, timespent:3600, reporter:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], aggregatetimeoriginalestimate:null, customfield_11400:null, updated:2014-04-02T08:48:17.213-0700, created:2014-04-02T08:31:59.357-0700, description:null, priority:[id:6, name:None, iconUrl:http://www.golivetutor.com/download/spacer.gif, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/priority/6], duedate:null, issuelinks:[], watches:[watchCount:1, isWatching:false, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/MISSWHITE-316/watchers], customfield_11500:null, worklog:[total:1, startAt:0, worklogs:[[id:14115, author:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], updated:2014-04-02T08:48:17.057-0700, created:2014-04-02T08:48:17.057-0700, timeSpentSeconds:3600, updateAuthor:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929/worklog/14115, started:2014-04-02T08:48:00.000-0700, timeSpent:1h, comment:]], maxResults:1], subtasks:[], customfield_10100:null, status:[id:10001, description:Sub-task has been actioned but is not yet complete., name:Doing, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/statuses/inprogress.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/status/10001], customfield_10006:3505, assignee:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], workratio:-1, parent:[id:18803, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18803, key:MISSWHITE-309, fields:[summary:test, issuetype:[subtask:false, id:2, description:A ticket is an identified piece of work that can later be reviewed by the team.  Often called asset or deliverable., name:Ticket, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/issuetypes/newfeature.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issuetype/2], status:[id:10003, description:Feature is currently being split into its sub-tasks. Additionally, the associated sub-tasks are being evaluated and estimated., name:Planning, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/statuses/visible.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/status/10003], priority:[id:6, name:None, iconUrl:http://www.golivetutor.com/download/spacer.gif, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/priority/6]]], attachment:[], customfield_10503:null, aggregatetimeestimate:0, project:[id:10604, name:Miss White (D.7634), self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/project/MISSWHITE, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=small&pid=10604&avatarId=10604, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=xsmall&pid=10604&avatarId=10604, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=medium&pid=10604&avatarId=10604, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?pid=10604&avatarId=10604], key:MISSWHITE], customfield_10702:t5, customfield_10701:test, customfield_11200:null, timeestimate:0, customfield_11301:null, customfield_10800:null, aggregateprogress:[total:3600, progress:3600, percent:100], lastViewed:null, customfield_11300:null, components:[[id:10724, name:Art, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/component/10724]], comment:[total:1, startAt:0, comments:[[id:15304, body:Advanced to "Doing" after time logged against issue., author:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], updated:2014-04-02T08:48:17.213-0700, created:2014-04-02T08:48:17.213-0700, updateAuthor:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929/comment/15304]], maxResults:1], customfield_10011:null, timeoriginalestimate:null, aggregatetimespent:3600]]
    

    REST output when deleting an hour for issue MISSWHITE-316:

    [id:18929, expand:renderedFields,names,schema,transitions,operations,editmeta,changelog, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929, key:MISSWHITE-316, fields:[summary:t5, progress:[total:0, progress:0], timetracking:[remainingEstimate:0h, remainingEstimateSeconds:0, timeSpentSeconds:0, timeSpent:0h], issuetype:[subtask:true, id:5, description:A task that needs to be done., name:Task, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/issuetypes/subtask_alternate.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issuetype/5], votes:[hasVoted:false, votes:0, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/MISSWHITE-316/votes], customfield_11100:null, resolution:null, fixVersions:[], resolutiondate:null, timespent:0, reporter:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], aggregatetimeoriginalestimate:null, customfield_11400:null, updated:2014-04-02T08:49:02.783-0700, created:2014-04-02T08:31:59.357-0700, description:null, priority:[id:6, name:None, iconUrl:http://www.golivetutor.com/download/spacer.gif, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/priority/6], duedate:null, issuelinks:[], watches:[watchCount:1, isWatching:false, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/MISSWHITE-316/watchers], customfield_11500:null, worklog:[total:1, startAt:0, worklogs:[[id:14115, author:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], updated:2014-04-02T08:48:17.057-0700, created:2014-04-02T08:48:17.057-0700, timeSpentSeconds:3600, updateAuthor:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929/worklog/14115, started:2014-04-02T08:48:00.000-0700, timeSpent:1h, comment:]], maxResults:1], subtasks:[], customfield_10100:null, status:[id:10001, description:Sub-task has been actioned but is not yet complete., name:Doing, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/statuses/inprogress.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/status/10001], customfield_10006:3505, assignee:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], workratio:-1, parent:[id:18803, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18803, key:MISSWHITE-309, fields:[summary:test, issuetype:[subtask:false, id:2, description:A ticket is an identified piece of work that can later be reviewed by the team.  Often called asset or deliverable., name:Ticket, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/issuetypes/newfeature.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issuetype/2], status:[id:10003, description:Feature is currently being split into its sub-tasks. Additionally, the associated sub-tasks are being evaluated and estimated., name:Planning, iconUrl:http://rnod-jira01.is.ad.igt.com:8080/images/icons/statuses/visible.png, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/status/10003], priority:[id:6, name:None, iconUrl:http://www.golivetutor.com/download/spacer.gif, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/priority/6]]], attachment:[], customfield_10503:null, aggregatetimeestimate:0, project:[id:10604, name:Miss White (D.7634), self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/project/MISSWHITE, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=small&pid=10604&avatarId=10604, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=xsmall&pid=10604&avatarId=10604, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?size=medium&pid=10604&avatarId=10604, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/projectavatar?pid=10604&avatarId=10604], key:MISSWHITE], customfield_10702:t5, customfield_10701:test, customfield_11200:null, timeestimate:0, customfield_11301:null, customfield_10800:null, aggregateprogress:[total:0, progress:0], lastViewed:null, customfield_11300:null, components:[[id:10724, name:Art, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/component/10724]], comment:[total:1, startAt:0, comments:[[id:15304, body:Advanced to "Doing" after time logged against issue., author:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], updated:2014-04-02T08:48:17.213-0700, created:2014-04-02T08:48:17.213-0700, updateAuthor:[name:worthar, active:true, emailAddress:Tanner.Wortham@IGT.com, self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/user?username=worthar, displayName:Wortham.Tanner, avatarUrls:[24x24:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=small&ownerId=worthar&avatarId=11000, 16x16:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=xsmall&ownerId=worthar&avatarId=11000, 32x32:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?size=medium&ownerId=worthar&avatarId=11000, 48x48:http://rnod-jira01.is.ad.igt.com:8080/secure/useravatar?ownerId=worthar&avatarId=11000]], self:http://rnod-jira01.is.ad.igt.com:8080/rest/api/2/issue/18929/comment/15304]], maxResults:1], customfield_10011:null, timeoriginalestimate:null, aggregatetimespent:0]]
    
  9. Andriy Zhdanov

    Hi Tanner,

    Great, thanks for you doing this! That's it! Look for "id:14115", you can see worklog in both responses :(

    So it means your guess is right, even though it's bad for you. May be you can ask on asnwers.atlassian.com, is there way to get update in listener, just do not mention Timesheet plugin, but JIRA rest, or workkflow, to avoid confusions. Feel free to put a link here, I may comment on it too.

    Thank you.

  10. Former user Account Deleted

    thanks for the assist. i'll see what answers i can dig up since we now know where the issue is.

  11. Log in to comment