Skip to content

[FR] Define API request timeout #221

@dkdavlar

Description

@dkdavlar

Is your feature request related to a problem? Please describe.
We some times experience that JamfGroupUploader stalls for 20 minutes while waiting for Jamf to respond. Jamf ends up with responding with a 502 or a 504 error.

Describe the solution you'd like
Either decrease the timeout or add an option so we can define the timeout ourselves.

Describe alternatives you've considered
The alternative is just to wait, but 20 minutes can quickly add a long time if it happens several times.

Additional context
Here is an example of a 502:

JamfComputerGroupUploader: Matching dir: /Users/anka/actions-runner/_work/SE-AutoPkg/SE-AutoPkg/overrides
JamfComputerGroupUploader: File found at: /Users/anka/actions-runner/_work/SE-AutoPkg/SE-AutoPkg/overrides/_JAMF_TEMPLATES/Standard/JamfSmartGroupTemplate-NeedsUpdate-Regex.xml
JamfComputerGroupUploader: Checking for existing 'Smart Group - Software - Google - Google Chrome - Needs update' on ***
JamfComputerGroupUploader: Checking for existing authentication token
JamfComputerGroupUploader: Checking *** against ***
JamfComputerGroupUploader: URL and user for token matches current request
JamfComputerGroupUploader: No existing valid token found
JamfComputerGroupUploader: Getting an authentication token using OAuth
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_6nwemvyr/jamf_upload_gn1qzpwj.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_6nwemvyr/curl_headers_from_jamf_upload.txt ***/api/oauth/token --header User-Agent: JamfUploader/2025.3.5.0 --request POST --silent --show-error --header Content-Type: application/x-www-form-urlencoded --output /tmp/jamf_upload_6nwemvyr/jamf_upload_gn1qzpwj.txt --cookie-jar /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt --data-urlencode client_id=*** --data-urlencode grant_type=client_credentials --data-urlencode client_secret=***
JamfComputerGroupUploader: Session token received
JamfComputerGroupUploader: Token: ***
JamfComputerGroupUploader: Expires: 2025-03-11T05:10:31.270452Z
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_6nwemvyr/jamf_upload_re3iwupb.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_6nwemvyr/curl_headers_from_jamf_upload.txt ***/JSSResource/computergroups --header User-Agent: JamfUploader/2025.3.5.0 --request GET --silent --show-error --header authorization: *** --header Accept: application/json --output /tmp/jamf_upload_6nwemvyr/jamf_upload_re3iwupb.txt --cookie-jar /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt
JamfComputerGroupUploader: Computer group 'Smart Group - Software - Google - Google Chrome - Needs update' already exists: ID 3040
JamfComputerGroupUploader: Replacing existing Computer Group as 'replace_group' is set to true
JamfComputerGroupUploader: Assigned Google Chrome.app.app to JSS_INVENTORY_NAME key.
JamfComputerGroupUploader: Replacing any instances of 'computergroup_name' with 'Smart Group - Software - Google - Google Chrome - Needs update'
JamfComputerGroupUploader: Replacing any instances of 'APPNAME' with 'Google Chrome.app'
JamfComputerGroupUploader: Replacing any instances of 'version_regex' with '^(\d{4,}.*|[2-9]\d{2,}.*|1[4-9]\d{1,}.*|13[5-9].*|134\.\d{2,}.*|134\.[1-9].*|134\.0\.\d{5,}.*|134\.0\.[7-9]\d{3,}.*|134\.0\.6999.*|134\.0\.6998\.\d{3,}.*|134\.0\.6998\.9\d{1,}.*|134\.0\.6998\.89.*)$'
JamfComputerGroupUploader: Replacing any instances of 'version_regex_2' with '^$'
JamfComputerGroupUploader: Replacing any instances of 'version_regex_3' with '^$'
JamfComputerGroupUploader: Computer Group data:
JamfComputerGroupUploader: <computer_group>
    <name>Smart Group - Software - Google - Google Chrome - Needs update</name>
    <is_smart>true</is_smart>
    <criteria>
        <criterion>
            <name>Application Title</name>
            <priority>0</priority>
            <and_or>and</and_or>
            <search_type>is</search_type>
            <value>Google Chrome.app</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>1</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^(\d{4,}.*|[2-9]\d{2,}.*|1[4-9]\d{1,}.*|13[5-9].*|134\.\d{2,}.*|134\.[1-9].*|134\.0\.\d{5,}.*|134\.0\.[7-9]\d{3,}.*|134\.0\.6999.*|134\.0\.6998\.\d{3,}.*|134\.0\.6998\.9\d{1,}.*|134\.0\.6998\.89.*)$</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>2</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^$</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>3</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^$</value>
        </criterion>
    </criteria>
</computer_group>
JamfComputerGroupUploader: Uploading Computer Group...
JamfComputerGroupUploader: Computer Group upload attempt 1
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_6nwemvyr/jamf_upload_7s6dtlqq.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_6nwemvyr/curl_headers_from_jamf_upload.txt ***/JSSResource/computergroups/id/3040 --header User-Agent: JamfUploader/2025.3.5.0 --request PUT --silent --show-error --header authorization: *** --upload-file /tmp/jamf_upload_6nwemvyr/jamf_upload_ucpxaso_.txt --header Content-type: application/xml --output /tmp/jamf_upload_6nwemvyr/jamf_upload_7s6dtlqq.txt --cookie-jar /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_6nwemvyr/curl_cookies_from_jamf_upload.txt
JamfComputerGroupUploader: HTTP response: 502
JamfComputerGroupUploader: API response:
JamfComputerGroupUploader: <html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

Traceback (most recent call last):
  File "/Library/AutoPkg/autopkglib/__init__.py", line 840, in process
    self.env = processor.process()
  File "/Library/AutoPkg/autopkglib/__init__.py", line 626, in process
    self.main()
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfComputerGroupUploader.py", line 102, in main
    self.execute()
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfComputerGroupUploaderBase.py", line 193, in execute
    self.upload_computergroup(
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfComputerGroupUploaderBase.py", line 109, in upload_computergroup
    self.status_check(r, "Computer Group", computergroup_name, request)
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfUploaderBase.py", line 591, in status_check
    raise ProcessorError(
autopkglib.ProcessorError: ERROR: Computer Group 'Smart Group - Software - Google - Google Chrome - Needs update' update failed - status code 502
  File "/Library/AutoPkg/autopkglib/__init__.py", line 840, in process
    self.env = processor.process()
Receipt written to /Users/anka/Library/AutoPkg/Cache/com.github.REDACTED.recipes.override.GoogleChrome/receipts/GoogleChrome.override.recipe-receipt-20250310-222724.plist

The following recipes failed:
    overrides/Google-Google_Chrome/GoogleChrome.override.recipe.yaml
        Error in com.github.REDACTED.recipes.override.GoogleChrome: Processor: com.github.grahampugh.jamf-upload.processors/JamfComputerGroupUploader: Error: ERROR: Computer Group 'Smart Group - Software - Google - Google Chrome - Needs update' update failed - status code 502

And a 504

com.github.grahampugh.jamf-upload.processors/JamfComputerGroupUploader
{'Input': {'CLIENT_ID': '***',
           'CLIENT_SECRET': '***',
           'JSS_URL': '***',
           'computergroup_name': 'Smart Group - Software - Microsoft - '
                                 'Microsoft Defender - Needs update',
           'computergroup_template': 'JamfSmartGroupTemplate-NeedsUpdate-Regex.xml',
           'replace_group': 'true',
           'sleep': '3'}}
JamfComputerGroupUploader: Matching dir: /Users/anka/actions-runner/_work/SE-AutoPkg/SE-AutoPkg/overrides
JamfComputerGroupUploader: File found at: /Users/anka/actions-runner/_work/SE-AutoPkg/SE-AutoPkg/overrides/_JAMF_TEMPLATES/Standard/JamfSmartGroupTemplate-NeedsUpdate-Regex.xml
JamfComputerGroupUploader: Checking for existing 'Smart Group - Software - Microsoft - Microsoft Defender - Needs update' on ***
JamfComputerGroupUploader: Checking for existing authentication token
JamfComputerGroupUploader: Checking *** against ***
JamfComputerGroupUploader: URL and user for token matches current request
JamfComputerGroupUploader: No existing valid token found
JamfComputerGroupUploader: Getting an authentication token using OAuth
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_kh8u4ll_/jamf_upload_akkkehi5.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_kh8u4ll_/curl_headers_from_jamf_upload.txt ***/api/oauth/token --header User-Agent: JamfUploader/2025.3.5.0 --request POST --silent --show-error --header Content-Type: application/x-www-form-urlencoded --output /tmp/jamf_upload_kh8u4ll_/jamf_upload_akkkehi5.txt --cookie-jar /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt --data-urlencode client_id=*** --data-urlencode grant_type=client_credentials --data-urlencode client_secret=***
JamfComputerGroupUploader: Session token received
JamfComputerGroupUploader: Token: ***
JamfComputerGroupUploader: Expires: 2025-03-11T06:54:05.462586Z
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_kh8u4ll_/jamf_upload_5yuqr3pb.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_kh8u4ll_/curl_headers_from_jamf_upload.txt ***/JSSResource/computergroups --header User-Agent: JamfUploader/2025.3.5.0 --request GET --silent --show-error --header authorization: *** --header Accept: application/json --output /tmp/jamf_upload_kh8u4ll_/jamf_upload_5yuqr3pb.txt --cookie-jar /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt
JamfComputerGroupUploader: Computer group 'Smart Group - Software - Microsoft - Microsoft Defender - Needs update' already exists: ID 2771
JamfComputerGroupUploader: Replacing existing Computer Group as 'replace_group' is set to true
JamfComputerGroupUploader: Assigned Microsoft Defender.app.app to JSS_INVENTORY_NAME key.
JamfComputerGroupUploader: Replacing any instances of 'computergroup_name' with 'Smart Group - Software - Microsoft - Microsoft Defender - Needs update'
JamfComputerGroupUploader: Replacing any instances of 'APPNAME' with 'Microsoft Defender.app'
JamfComputerGroupUploader: Replacing any instances of 'version_regex' with '^(\d{4,}.*|[2-9]\d{2,}.*|1[1-9]\d{1,}.*|10[2-9].*|101\.\d{6,}.*|101\.[3-9]\d{4,}.*|101\.2[6-9]\d{3,}.*|101\.25[1-9]\d{2,}.*|101\.250[2-9]\d{1,}.*|101\.2501[3-9].*)$'
JamfComputerGroupUploader: Replacing any instances of 'version_regex_2' with '^(101\.25012\.\d{5,}.*|101\.25012\.[1-9]\d{3,}.*|101\.25012\.0[1-9]\d{2,}.*|101\.25012\.00[1-9]\d{1,}.*|101\.25012\.0009.*|101\.25012\.0008.*)$'
JamfComputerGroupUploader: Replacing any instances of 'version_regex_3' with '^$'
JamfComputerGroupUploader: Computer Group data:
JamfComputerGroupUploader: <computer_group>
    <name>Smart Group - Software - Microsoft - Microsoft Defender - Needs update</name>
    <is_smart>true</is_smart>
    <criteria>
        <criterion>
            <name>Application Title</name>
            <priority>0</priority>
            <and_or>and</and_or>
            <search_type>is</search_type>
            <value>Microsoft Defender.app</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>1</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^(\d{4,}.*|[2-9]\d{2,}.*|1[1-9]\d{1,}.*|10[2-9].*|101\.\d{6,}.*|101\.[3-9]\d{4,}.*|101\.2[6-9]\d{3,}.*|101\.25[1-9]\d{2,}.*|101\.250[2-9]\d{1,}.*|101\.2501[3-9].*)$</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>2</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^(101\.25012\.\d{5,}.*|101\.25012\.[1-9]\d{3,}.*|101\.25012\.0[1-9]\d{2,}.*|101\.25012\.00[1-9]\d{1,}.*|101\.25012\.0009.*|101\.25012\.0008.*)$</value>
        </criterion>
        <criterion>
            <name>Application Version</name>
            <priority>3</priority>
            <and_or>and</and_or>
            <search_type>does not match regex</search_type>
            <value>^$</value>
        </criterion>
    </criteria>
</computer_group>
JamfComputerGroupUploader: Uploading Computer Group...
JamfComputerGroupUploader: Computer Group upload attempt 1
JamfComputerGroupUploader: Output file is:  /tmp/jamf_upload_kh8u4ll_/jamf_upload_nie5on8f.txt
JamfComputerGroupUploader: curl command: /usr/bin/curl --location --dump-header /tmp/jamf_upload_kh8u4ll_/curl_headers_from_jamf_upload.txt ***/JSSResource/computergroups/id/2771 --header User-Agent: JamfUploader/2025.3.5.0 --request PUT --silent --show-error --header authorization: *** --upload-file /tmp/jamf_upload_kh8u4ll_/jamf_upload_fbavhhku.txt --header Content-type: application/xml --output /tmp/jamf_upload_kh8u4ll_/jamf_upload_nie5on8f.txt --cookie-jar /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt --cookie /tmp/jamf_upload_kh8u4ll_/curl_cookies_from_jamf_upload.txt
JamfComputerGroupUploader: HTTP response: 504
JamfComputerGroupUploader: API response:
JamfComputerGroupUploader: <html>
<head><title>504 Gateway Time-out</title></head>
<body>
<center><h1>504 Gateway Time-out</h1></center>
</body>
</html>

Traceback (most recent call last):
  File "/Library/AutoPkg/autopkglib/__init__.py", line 840, in process
    self.env = processor.process()
  File "/Library/AutoPkg/autopkglib/__init__.py", line 626, in process
    self.main()
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfComputerGroupUploader.py", line 102, in main
    self.execute()
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfComputerGroupUploaderBase.py", line 193, in execute
    self.upload_computergroup(
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfComputerGroupUploaderBase.py", line 109, in upload_computergroup
    self.status_check(r, "Computer Group", computergroup_name, request)
  File "/Users/anka/Library/AutoPkg/RecipeRepos/com.github.autopkg.grahampugh-recipes/JamfUploaderProcessors/JamfUploaderLib/JamfUploaderBase.py", line 591, in status_check
    raise ProcessorError(
autopkglib.ProcessorError: ERROR: Computer Group 'Smart Group - Software - Microsoft - Microsoft Defender - Needs update' update failed - status code 504
  File "/Library/AutoPkg/autopkglib/__init__.py", line 840, in process
    self.env = processor.process()
Receipt written to /Users/anka/Library/AutoPkg/Cache/com.github.REDACTED.recipes.override.MicrosoftDefender/receipts/MicrosoftDefender.override.recipe-receipt-20250311-001306.plist

The following recipes failed:
    overrides/Microsoft-MicrosoftDefender/MicrosoftDefender.override.recipe.yaml
        Error in com.github.REDACTED.recipes.override.MicrosoftDefender: Processor: com.github.grahampugh.jamf-upload.processors/JamfComputerGroupUploader: Error: ERROR: Computer Group 'Smart Group - Software - Microsoft - Microsoft Defender - Needs update' update failed - status code 504

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions