decaporg / decap-cms

A Git-based CMS for Static Site Generators
https://decapcms.org
MIT License
17.97k stars 3.05k forks source link

Frequently running into slowness and rate limiting. #4097

Closed wing5wong closed 4 years ago

wing5wong commented 4 years ago

Issue: Our admin users are currently trying to update information relating to courses, assessment and subject areas. Many time the Relation widget is extremely slow to load, and often searching for items takes an incredible time, or hits rate limits. i.e. accessing a collection from the menu shows ' Loading Entries -> Caching Entries ->This may take several minutes' and never loads.

The user logs in. Clicks "NCEA Standards" Tries to modify the courses relation.

The user tries to find an assessment by opening the "NCEA Standards" collection. Infinite scroll towards the right assessment, more records load, repeat. Eventually can not find the standard quickly, so try searching it. Now the search loads forever.

image

Im not entirely sure this is a bug within CMS or just our setup is not quite the right fit for this CMS and causing issues.

Expected behaviour: The relation widgets should load quickly. (<3s) The infinite scroll causes issues with rate limiting seemingly. it would be easier to load all the items (or increase the per page count perhaps)

Applicable Versions:

CMS configuration

backend:
  name: git-gateway
  branch: master
  squash_merges: true

media_library:
  name: cloudinary
  config:
    cloud_name: X
    api_key: X

collections:
  - name: announcements
    label: Announcements
    label_singular: "Announcement"
    folder: "source/_announcements"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: 'Student Achievement Conferences' }
      - { label: "Emergency", name: "is_emergency", widget: "boolean", default: false }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Subtitle", name: "subtitle", widget: "string", required: false, hint: 'Students released at 1.50pm (end of Period 4)' }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Tags", name: "tags", widget: "list", required: false }

  - name: "news"
    label: "News"
    label_singular: "News"
    folder: "source/_news"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{year}}-{{month}}-{{day}} | {{title}}"
    view_filters:
      - label: 'Posts published in 2020'
        field: date
        pattern: '2020'
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - label: "Feature Image"
        name: "feature_image"
        widget: "object"
        required: false
        fields:
        - { label: "Image Filename", name: "image", widget: "image", required: false }
        - { label: "Image Description", name: "description", widget: "string", required: false }
        - { label: "Image Alt Text", name: "alt", widget: "string", required: false }
        - { label: "Image Credit", name: "credit", widget: "string", required: false }
      - { label: "Short Intro", name: "short", widget: "text", required: false, hint: "Use this to override the default generated option which is the first 200 characters of the body" }
      - { label: "Body", name: "body", widget: "markdown" }
      - label: "News Author"
        name: "news_author"
        widget: "object"
        required: false
        fields:
        - { label: "Date", name: "date", widget: "date", required: false }
        - { label: "Author", name: "name", widget: "string", required: false }
        - { label: "Publication", name: "publication", widget: "string", required: false }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
        - { label: "Image Filename", name: "image", widget: "image" }
        - { label: "Image Description", name: "description", widget: "string", required: false }
      - { label: "Description", name: "description", widget: "hidden", required: false }
      - { label: "Related Departments", name: faculties, required: false, multiple: true, widget: "relation", collection: "faculties",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Subjects", name: subject_areas, required: false, multiple: true, widget: "relation", collection: "subject_areas",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Extracurricular Areas", name: extracurricular_areas, required: false, multiple: true, widget: "relation", collection: "extracurricular_areas",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Extracurricular Activities", name: extracurricular_activities, required: false, multiple: true, widget: "relation", collection: "extracurricular_activities",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Show in News Sliders", name: "show_in_slider", widget: "boolean", default: true, required: false }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Image Filename", name: "image", widget: "hidden", required: false }
      - { label: "Image Title", name: "image_title", widget: "hidden", required: false }
      - { label: "Image Alt", name: "image_alt", widget: "hidden", required: false }
      - { label: "Image credit", name: "image_credit", widget: "hidden", required: false, hint: "e.g. Andy McGechan" }

  - name: "events"
    label: "Events"
    label_singular: "Event"
    folder: "source/_events"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{year}}-{{month}}-{{day}} | {{title}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Description", name: "description", widget: "text", required: false }
      - { label: "Short Intro", name: "short", widget: "text", required: false }
      - { label: "Body", name: "body", widget: "markdown" }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
        - { label: "Image Filename", name: "image", widget: "image" }
        - { label: "Image Description", name: "description", widget: "string", required: false }

  - name: "newsletters"
    label: "Newsletters"
    label_singular: "Newsletter"
    folder: "source/_newsletters"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{month}} {{year}} | {{title}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }
      - { label: "Body", name: "body", widget: "markdown", required: false }

  - name: "about_whs"
    label: "About WHS Pages"
    label_singular: "About WHS Page"
    folder: "source/_about"
    create: false
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - label: "Image Filename"
        name: "image"
        widget: "image"
        required: false
      - { label: "Section Intro (shown on main page)", name: "intro", widget: "text", required: false }
      - { label: "Intro Button Text (shown on main page)", name: "button_text", widget: "text", required: false }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "extends", name: "Extends", widget: "hidden", default: '_layouts.post' }
      - { label: "Visible in nav", name: "visible", widget: "select", default: 'Yes', options: ["Yes", "No"], multiple: false }

  - name: "board_members"
    label: "Board Members"
    label_singular: "Board Member"
    folder: "source/_board_members"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Mr Joe Bloggs" }
      - { label: "Position", name: "position", widget: "string", required: false }
      - { label: "Category", label_singular: "Category", name: "category", widget: "select", multiple: false,
          options: ["Board Chairperson", "Principal","Parent Representative", "Staff Representative", "Co-opted Member", "Also in Attendance"]
        }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }

  - name: "curriculum"
    label: "Curriculum Pages"
    label_singular: "Curriculum Entry"
    folder: "source/_curriculum"
    create: false
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "extends", name: "Extends", widget: "hidden", default: '_layouts.post' }
      - { label: "Intro", name: "intro", widget: "text" }
      - { label: "Body", name: "body", widget: "markdown" }

  - name: "galleries"
    label: "Galleries"
    label_singular: "Gallery"
    folder: "source/_galleries"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Faculty", name: faculty, required: false, widget: "relation", collection: "faculties", searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
          - { label: "Image Filename", name: "image", widget: "image", required: false }
          - { label: "Image Description", name: "description", widget: "string", required: false }
          - { label: "Image Alt Text", name: "alt", widget: "string", required: false }
          - { label: "Image Credit", name: "credit", widget: "string", required: false }

  - name: "facilities"
    label: "Facilities"
    label_singular: "Facility"
    folder: "source/_facilities"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Description", name: "description", widget: "text", hint: "SHORT search engine snippet text" }
      - { label: "Body", name: "body", widget: "markdown" }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
        - { label: "Image Filename", name: "image", widget: "image" }
        - { label: "Image Description", name: "description", widget: "string" }
      - { label: "Faculties", name: faculties,   required: false, multiple: true, widget: "relation", collection: "faculties",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }

  - name: "for_parents"
    label: "For Parents Pages"
    label_singular: "For Parents Page"
    folder: "source/_for_parents"
    create: false
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Intro", name: "intro", widget: "text", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Extends", name: "extends", widget: "hidden", default: "_layouts.post" }

  - name: "international"
    label: "International Pages"
    label_singular: "International Page"
    folder: "source/_international"
    create: false
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Extends", name: "extends", widget: "hidden", default: "_layouts.post" }

  - name: "news_and_events"
    label: "News and Events Pages"
    label_singular: "News and Events Page"
    folder: "source/_news_and_events"
    create: false
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Extends", name: "extends", widget: "hidden", default: "_layouts.post" }

  - name: "faculties"
    label: "Departments"
    label_singular: "Department"
    folder: "source/_faculties"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Maori Title", name: "maori_title", widget: "string", required: false }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Is a Teaching Faculty", name: is_teaching_faculty, widget: boolean, default: true}
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Intro", name: "intro", widget: "text", required: false }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Heads of Faculty", name: hofs, required: false, multiple: true, widget: "relation", collection: "staff",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Assistant Heads of Faculty", name: ahofs, required: false, multiple: true, widget: "relation", collection: "staff",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Vocational Pathways", name: "vocational_pathways", widget: "select", required: false, multiple: true, 
          options: [       
            { label: "Service Industries", value: "service" },
            { label: "Creative Industries", value: "creative" },
            { label: "Social and Community Services", value: "social" },
            { label: "Primary Industries", value: "primary" },
            { label: "Construction and Infrastructure", value: "construction" },
            { label: "Manufacturing and Technology", value: "manufacturing" }
          ]
        }
      - { label: "Related Facilities", name: facilities, required: false, multiple: true, widget: "relation", collection: "facilities",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }

  - name: "subject_areas"
    label: "Subject Areas"
    label_singular: "Subject Area"
    folder: "source/_subject_areas"
    create: true
    slug: "{{slug}}"
    summary: "{{title}} | {{faculty}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Maori Title", name: "maori_title", widget: "string", required: false }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Faculty", name: faculty, required: true, widget: "relation", collection: "faculties",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Body", name: "body", widget: "markdown", required: false }

  - name: "courses"
    label: "Courses"
    label_singular: "Course"
    folder: "source/_courses"
    create: true
    slug: "{{slug}}"
    summary: "{{title}} - {{name}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Maori Title", name: "maori_title", widget: "string", required: false }
      - { label: "Name", name: "name", widget: "string" }
      - { label: "Code", name: "code", widget: "string" }
      - { label: "Subject Area", name: "subject_area", required: true, widget: "relation", collection: "subject_areas",
          searchFields: ["title"], valueField: "title", displayFields: ["title", "faculty"] }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Entry Requirements", name: "entry_requirements", widget: "string", required: false }
      - { label: "Year Level", name: year, widget: select, options: ["9","10","11","12","13"] }
      - { label: "Type", name: "type", widget: "select", options: ["Core","Compulsory", "Optional", "Semester Course"], default: "Optional" }
      - { label: "Course Duration", name: course_duration, widget: select, options: ["One Term", "Half Year","Full Year", "5 Week Introduction Plus 20 Week Course If Selected"] }
      - { label: "Course Level", name: course_level, widget: select, options: ["Year 9","Year 10","NCEA 1","NCEA 2", "NCEA 3", "NCEA 1 and 2","NCEA 2 and 3","NCEA 1,2 and 3","All Year Levels"] }
      - { label: "Assessment Type", name: assessment_type, widget: select, options: ["Achievement Standard","Unit Standard","Achievement and Unit Standard","Achievement Standard and Scholdarship","Achievement Standard and Cambridge as Examination","Compulsory", "Optional"], required: false }
      - { label: "Leads To", name: "leads_to", required: false, widget: "relation", multiple: true, collection: "courses",
          searchFields: ["code","title"], valueField: "code", displayFields: ["code", "name"] }
      - { label: "Available Standards", name: "standards", required: false, widget: "relation", multiple: true, collection: "assessments",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Notes", name: "notes", widget: "text", required: false }
      - { label: "Credits", name: "credits", widget: "string", required: false }
      - { label: "Course Contribution", name: "course_fees", widget: "string", required: false }
      - { label: "UE Approved", name: "ue_approved", widget: "boolean", required: false, default: false }
      - { label: "Invitation Only", name: "invitation_only", widget: "boolean", required: false, default: false }
      - { label: "Endorsement", name: "endorsement", widget: "boolean", required: false, default: false }

  - name: "assessments"
    label: "NCEA Standards"
    label_singular: "NCEA Standard"
    folder: "source/_assessments"
    create: true
    summary: "{{title}} | {{description}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Courses", name: "categories", required: false, multiple: true, widget: "relation", collection: "courses", searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Description", name: "description", widget: "text" }
      - { label: "URL", name: "pdf", widget: "string" }
      - { label: "Level", name: "level", widget: "select", options: ["1","2","3"], required: false }
      - { label: "Credits", name: "credits", widget: "number" }
      - { label: "Assessment", name: "assessment", widget: "select",options: ["Internal", "External"] }
      - { label: "U.E. Lit Reading", name: "ue_lit_reading", widget: "boolean", required: false, default: false }
      - { label: "U.E. Lit Writing", name: "ue_lit_writing", widget: "boolean", required: false, default: false }
      - { label: "Vocational Pathways", name: "vocational_pathways", widget: "select", required: false, multiple: true,
          options: [       
            { label: "Service Industries", value: "service" },
            { label: "Creative Industries", value: "creative" },
            { label: "Social and Community Services", value: "social" },
            { label: "Primary Industries", value: "primary" },
            { label: "Construction and Infrastructure", value: "construction" },
            { label: "Manufacturing and Technology", value: "manufacturing" }
          ]
        }

  - name: "extracurricular_areas"
    label: "Extracurricular Areas"
    label_singular: "Extracurricular Area"
    folder: "source/_extracurricular_areas"
    create: true
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Feature Image", name: "image", widget: "image", required: false }
      - { label: "Person in Charge", required: false, name: "person_in_charge", widget: "relation", collection: "staff",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }

  - name: "extracurricular_activities"
    label: "Extracurricular Activities"
    label_singular: "Extracurricular Activity"
    folder: "source/_extracurricular_activities"
    create: true
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "People", name: "people", widget: "list",
          fields: [
            { name: "name", widget: "relation", collection: "staff",
              searchFields: ["title"], valueField: "title", displayFields: ["title"] },
            { name: "role", widget: string, default: "Teacher in Charge", hint: "The users role for this activity. e.g. Teacher in Charge, Coach - NOT: HEAD OF FACULTY" }
          ]
        }
      - { label: "Terms", name: "terms", widget: "select", options: ["Term 1", "Term 2", "Term 3", "Term 4"], required: false, multiple: true}
      - { label: "Uniform", name: "uniform", required: false, widget: "markdown" }
      - { label: "Extra Curricular Area", name: "extracurricular_area", widget: "relation", collection: "extracurricular_areas",
          searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Category", name: "category", widget: "string", required: false, hint: "an additional grouping that the activity may be grouped under. e.g. 'School Sports', 'Local Clubs', 'Dance' etc" }
      - { label: "Cost", name: "cost", widget: "string", required: false }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Feature Image", name: "image", widget: "image", required: false }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
        - { label: "Image Filename", name: "image", widget: "image" }
        - { label: "Image Description", name: "description", widget: "string", required: false }
      - label: "Content Blocks"
        label_singular: "Content Block"
        name: blocks
        widget: list
        types: [
          {
            label: "Hero", name: hero, widget: object,
            fields: [
              { label: "Heading", name: heading, widget: string},
              { label: "Content", name: content, widget: markdown, buttons: ["bold", "italic", "link"], required: false }
            ]
          },
          {
            label: "Rich Text Block", name: textBlock, widget: object,
            fields: [
              { label: "Heading", name: heading, widget: string, required: false },
              { label: "Content", name: content, widget: markdown} 
            ]
          },
          {
            label: "Youtube Video", name: video, widget: object,
            fields: [
              { label: "Heading", name: heading, widget: string, required: false },
              { label: "Video URL", name: url, widget: string} ,
              { label: "Content", name: content, widget: markdown, required: false }
            ]
          },
          {
            label: "Facebook Video", name: videoFB, widget: object,
            fields: [
              { label: "Heading", name: heading, widget: string, required: false },
              { label: "Video URL", name: url, widget: string} ,
              { label: "Content", name: content, widget: markdown, required: false }
            ]
          }
        ]

  - name: "achievers_lists"
    label: "Achievers Lists"
    label_singular: "Achievers List"
    folder: "source/_achievers_lists"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }

  - name: "prizegiving_booklets"
    label: "Prizegiving Booklets"
    label_singular: "Prizegiving Booklet"
    folder: "source/_prizegiving_booklets"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }

  - name: "testimonials"
    label: "Testimonials"
    label_singular: "Testimonial"
    folder: "source/_testimonials"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Place", name: "place", widget: "string" }
      - { label: "International", name: "international", widget: boolean}
      - { label: "image", name: "image", widget: "image" }
      - { label: "Body", name: "body", widget: "markdown", required: false }

  - name: "scholarships"
    label: "Scholarships"
    label_singular: "Scholarship"
    folder: "source/_scholarships"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Eligible", name: "eligible", widget: "select",
          options: [ "Current Students", "Ex-Students"] }
      - { label: "Application URL", name: "url", widget: "string", required: false, hint: "A link to an online application form e.g. Google Form"}
      - { label: "Application PDF", name: "file", widget: "file", required: false}
      - { label: "Body", name: "body", widget: "markdown", required: true }

  - name: "honours"
    label: "Honours Board"
    label_singular: "Honours Entry"
    folder: "source/_honours"
    create: true
    slug: "{{slug}}"
    summary: "{{title}} - {{person1_name}} | {{person2_name}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Dux X YYYY" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Award", name: "award", widget: "select",
          options: [ "Dux Litterarum", "Dux Ludorum", "Dux Artium", "Maori Student Dux", "Heads of School"] }
      - { label: "Person 1 Name", name: "person1_name", widget: string }
      - { label: "Person 1 Image", name: "person1_image", widget: image, required: false }
      - { label: "Person 2 Name", name: "person2_name", widget: string, required: false  }
      - { label: "Person 2 Image", name: "person2_image", widget: image, required: false }

  - name: "policies"
    label: "Policies"
    label_singular: "Policy"
    folder: "source/_policies"
    create: false
    slug: "{{slug}}"
    fields: 
      - { label: "Title", name: "title", widget: "string" }
      - { name: "policyAreas", label: "Policy Areas", label_singular: "Policy Area", widget: "list",
          fields: [
            { 
              label: "Policy Area Name", name: "policyArea", widget: "select",
              options: [
                "1. Curriculum Delivery",
                "2. Documentation and Self Review",
                "3. Personnel",
                "4. Finance and Property",
                "5. Health and Safety",
                "6. Administration"
              ]
            },
            { label: "Policies", name: policies, widget: list,
              fields: [
                { name: "policy", label: "Policy", widget: "string" },
                { name: document, label: "Document", widget: "file", allow_multiple: false }
              ]
            }
          ]
        }

  - name: "school_leaders"
    label: "School Leaders"
    label_singular: "School Leader"
    folder: "source/_school_leaders"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Head Boy and Girl, Deputy Head Boy and Girl, Cultural, Māori, E-Life" }
      - { label: "Category", label_singular: "Category", name: "category", widget: "select", multiple: false, 
          options: ["Heads of School","Deputy Heads of School","Prefects","Heads of House"]
        }
      - { label: "Body", name: "body", widget: "string", required: true, hint: "e.g. Joe Bloggs and Jane Doe" }
      - { label: "Image Filename", name: "image", widget: "image", required: false }

  - name: "prefects"
    label: "Prefects"
    label_singular: "Prefect"
    folder: "source/_prefects"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Jack Donaldson and Emelye Brown" }
      - { label: "Category", label_singular: "Category", name: "category", widget: "select", multiple: false, 
          options: ["Head Boy and Girl", "Deputy Head Boy and Girl", "Head of Academia","Head of Culture","Head of Community"," Head of E-Life", "Head of Social","Head of Sport", "Head of Maori", "Head of Pasifika", "Head of International", "Head of Awa House", "Head of Maunga House", "Head of Moana House", "Head of Whenua House" ]
        }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Image Filename", name: "image", widget: "image", required: false }

  - name: "staff"
    label: "Staff"
    label_singular: "Staff Member"
    folder: "source/_staff"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{title}} - {{position}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Mr Joe Bloggs" }
      - { label: "Position", name: "position", widget: "string", required: false }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Departments", multiple: true, name: departments, widget: "relation", collection: "faculties", searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Positions", name: "positions", widget: "list", required: false, multiple: true,
          fields: [
            { name: "title", label: "Title", widget: "string" },
            { label: "Department", name: department, widget: "relation", collection: "faculties",
              searchFields: ["title"], valueField: "title", displayFields: ["title"] }
          ]
        }
      - { label: "Phone", name: "phone", widget: "string", required: false }
      - { label: "Email", name: "email", widget: "string", required: false }

  - name: "term_dates"
    label: "Term Dates"
    label_singular: "Term Date"
    folder: "source/_term_dates"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: "Public Holidays should have title 'Public Holidays' included, otherwise use Term X" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Start Dates", name: "start_dates", widget: list,
          fields: [
            { label: "Date", name: "date", widget: "date" },
            { label: "Body", name: "body", widget: "string" }
          ]
      }
      - { label: "End Dates", name: "end_dates", widget: list,
          fields: [
            { label: "Date", name: "date", widget: "date", required: false },
            { label: "Body", name: "body", widget: "string" }
          ]
      }

  - name: "vacancies"
    label: "Vacancies"
    label_singular: "Vacancy"
    folder: "source/_vacancies"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Email", name: "email", widget: "string", default: "principal@whs.ac.nz" }
      - { label: "Body", name: "body", widget: "markdown" }

  - name: "school_documents"
    label: "School Documents"
    label_singular: "School Document"
    folder: "source/_school_documents"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }

  - name: "the_record"
    label: "The Record"
    folder: "source/_the_record"
    create: true
    slug: "{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }

  - name: "pages"
    label: "Pages"
    create: true
    folder: "source/_pages"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "date" }
      - { label: "Body", name: "body", widget: "markdown", required: false }
      - { label: "Extends", name: "extends", widget: "hidden" }
      - label: "Page Builder"
        label_singular: "Content Block"
        name: blocks
        widget: list
        types:
          - label: "H2 Section"
            name: h2section
            widget: object
            fields:
              - { label: "Heading", name: heading, widget: string}
              - { label: "Content", name: content, widget: markdown, buttons: ["bold", "italic", "link"], required: false }
          - label: "Rich Text Block"
            name: textBlock
            widget: object
            fields:
              - { label: "Heading", name: heading, widget: string, required: false }
              - { label: "Content", name: content, widget: markdown} 
          - label: "Video"
            name: video
            widget: object
            fields:
              - { label: "Heading", name: heading, widget: string, required: false }
              - { label: "Video URL", name: url, widget: string} 
              - { label: "Content", name: content, widget: markdown, required: false } 
          - label: "Facebook"
            name: facebook
            widget: object
            fields:
              - { label: "Heading", name: heading, widget: string, required: false }
              - { label: "Facebook URL", name: url, widget: string} 
          - label: "Term Dates"
            name: termDates
            widget: object
            fields:
              - { label: "Heading", name: heading, widget: string, default: "Term Dates" }
erezrokah commented 4 years ago

Hi @wing5wong, How many entries per collection do you have? The CMS uses caching extensively and even conditional requests to avoid reaching the rate limit, but in some cases that's not enough.

As for pagination, the CMS uses the git tree API which allows listing around 100k files in a single request, but in order to get a file content we need to send a request per file. The CMS actually simulates pagination on the client (when using GitHub) and retrieves files in batches of 20 while you scroll down to avoid reading all the files.

The CMS doesn't paginate when the user sorts the collection since it needs to retrieve all files, read and parse their content in order to perform the sort. When the files are not cached and there are many files this can cause the limit to be reached. This is mainly an issue for new users that don't have the content cached.

When the CMS detects the limit it reached, it throttles the requests, but in the case of GitHub that doesn't help much since the limit is reset once per hour.

Possible solutions:

  1. Use the GitHub backend directly (and not git-gateway) if possible. When using git-gateway a single account is used to connect to the repo, thus the limit is shared across different users. When using GitHub directly, each user gets a dedicated limit (and doesn't block others when reached). Downside - users need a GitHub account.
  2. Use file collections for relations. You could have a single file with a list widget instead of multiple entries (thus multiple files). Then the CMS would only need to read a single file to list the relation entries.
  3. Set sortableFields to an empty array to disable sorting: https://www.netlifycms.org/docs/configuration-options/#sortablefields

I would go with option 1, if possible.

wing5wong commented 4 years ago

Hey there thanks for the feedback. Actually i found one other large collection, our news. overall not many items given the numbers you stated right?

News: 2515 Assessments: 799 Courses: 214

  1. will be costly for us at this point which is one of the limiting factors.

  2. can you clarify here? Do you mean for example have a "SubjectSetup" type file with a list widget? Otherwise im not sure a file relation is suitable, as they files may not already exist (sometimes the user adds additional courses or assessments)

    • List Widget
    • Subject Areas (relation to _subject_area)
      • Courses (relation to _courses)
        • Assessments (Relation to _standards)
  3. ideally we keep this so il avoid this for now, but keep it in mind

erezrokah commented 4 years ago

News: 2515 Assessments: 799 Courses: 214

The stated limit is 5000 requests per hour, so a new user sorting some collections can break the limit easily I think (we also send requests to get the commit date and some other metadata). Note that the limit resets only once an hour.

2. can you clarify here? Do you mean for example have a "SubjectSetup" type file with a list widget? Otherwise im not sure a file relation is suitable, as they files may not already exist (sometimes the user adds additional courses or assessments)

Sure, it is a relatively new feature for targeting lists in files: The target collection can be (this is a slimmed version):

  - name: "subject_areas"
    label: "Subject Areas"
    files:
      - name: areas
        file: source/subject_areas.json
        format: json
        fields:
          - label: "Areas"
            widget: "list"
            name: "areas"
            fields:
              - { label: "Title", name: "title", widget: "string" }

Then you can configure the relation via:

- label: "Related Subjects"
  name: subject_areas
  widget: "relation"
  collection: "subject_areas"
  file: "areas"
  searchFields: ["areas.*.title"]
  valueField: "areas.*.title"

This was the CMS would only need to read a single file to resolve the relation.

See more here: https://www.netlifycms.org/docs/widgets/#relation

erezrokah commented 4 years ago

Closing this as I don't see what else can be done on the CMS side. Please comment if still relevant

wing5wong commented 4 years ago

No worries. Thought about a few of these and have just resorted back to string/list widgets for these fields.

Using Jigsaw Static site generator i require to have these single files (i believe) in order to generate the required data for my pages.

i seem to get ~800 requests sent when typing in relation fields seems to reach the rate-limit thresholds extremely fast ( e.g. typing "DTA2" in courses relation)

Thanks for the info regardless!

On 5/08/2020, at 9:56 PM, Erez Rokah notifications@github.com wrote:



Closed #4097https://github.com/netlify/netlify-cms/issues/4097.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/netlify/netlify-cms/issues/4097#event-3623926472, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABBT5UMJ7ZZM5QWKL3NHGELR7EUDHANCNFSM4PPLWTQQ.

erezrokah commented 4 years ago

Once those requests are cached it shouldn't impact the rate limit thought (you'd still see them as requests in the browser, but they will be retrieved from the browser cache or get a 304 Not Modified response which doesn't count under the limit).

wing5wong commented 4 years ago

@erezrokah hi there, just feeding back into this some more - today our user has made 11 commits (commits labeled "2 hours ago" ) and has since been locked out. She is the only user accessing the site currently.

image

another hour has passed and 4 commits made - locked out by rate limiting. image

looking at our config file (below) for NEWS (2548 items) , ANNOUNCEMENTS (1 item) and NEWSLETTERS (39 items) below, I have disabled sorting on the NEWS collection. all that remains there are some relation widgets within the news collection

Im absolutely lost as to what can be causing this now - the only thing i can think of is to remove the relation fields from the NEWS collection... is that even going to help?

Looking in Devtools > Application>Storage>IndexedDB there exists approx 9500 entries already. This is around double the actual files in the folder - is my understanding correct that as these are cached, they should NOT be contributing to the rate limiting?

Is her cache somehow invalid and all these items are being re-cached each time? Something just doesn't add up now! Assuming she already has all these entries cached on her machine, we should b seeing a total of 15 (11 + 4) API requests to github, correct? even at 100x that number, we should be well below the 5000 limit.

image

- name: "news"
    label: "News"
    label_singular: "News"
    folder: "source/_news"
    create: true
    sortableFields: []
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{year}}-{{month}}-{{day}} | {{title}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - label: "Feature Image"
        name: "feature_image"
        widget: "object"
        required: false
        fields:
        - { label: "Image Filename", name: "image", widget: "image", required: false }
        - { label: "Image Description", name: "description", widget: "string", required: false }
        - { label: "Image Alt Text", name: "alt", widget: "string", required: false }
        - { label: "Image Credit", name: "credit", widget: "string", required: false }
      - { label: "Short Intro", name: "short", widget: "text", required: false, hint: "Use this to override the default generated option which is the first 200 characters of the body" }
      - { label: "Body", name: "body", widget: "markdown" }
      - label: "News Author"
        name: "news_author"
        widget: "object"
        required: false
        fields:
        - { label: "Date", name: "date", widget: "datetime", required: false }
        - { label: "Author", name: "name", widget: "string", required: false }
        - { label: "Publication", name: "publication", widget: "string", required: false }
      - label: "Image Gallery"
        name: "image_gallery"
        widget: "list"
        fields:
        - { label: "Image Filename", name: "image", widget: "image" }
        - { label: "Image Description", name: "description", widget: "string", required: false }
      - { label: "Description", name: "description", widget: "hidden", required: false }
      - { label: "Related Departments", name: faculties, required: false, multiple: true, widget: "relation", collection: "faculties",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Subjects", name: subject_areas, required: false, multiple: true, widget: "relation", collection: "subject_areas",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Extracurricular Areas", name: extracurricular_areas, required: false, multiple: true, widget: "relation", collection: "extracurricular_areas",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Related Extracurricular Activities", name: extracurricular_activities, required: false, multiple: true, widget: "relation", collection: "extracurricular_activities",  searchFields: ["title"], valueField: "title", displayFields: ["title"] }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Show in News Sliders", name: "show_in_slider", widget: "boolean", default: true, required: false }
      - { label: "Date", name: "date", widget: "datetime" }
      - { label: "Image Filename", name: "image", widget: "hidden", required: false }
      - { label: "Image Title", name: "image_title", widget: "hidden", required: false }
      - { label: "Image Alt", name: "image_alt", widget: "hidden", required: false }
      - { label: "Image credit", name: "image_credit", widget: "hidden", required: false, hint: "e.g. Andy McGechan" }

  - name: "newsletters"
    label: "Newsletters"
    label_singular: "Newsletter"
    folder: "source/_newsletters"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    summary: "{{month}} {{year}} | {{title}}"
    fields:
      - { label: "Title", name: "title", widget: "string" }
      - { label: "Date", name: "date", widget: "datetime" }
      - { label: "Tags", name: "tags", widget: "list", required: false }
      - { label: "Filename", name: "file", widget: "file", allow_multiple: false }
      - { label: "Body", name: "body", widget: "markdown", required: false }

  - name: announcements
    label: Announcements
    label_singular: "Announcement"
    folder: "source/_announcements"
    create: true
    slug: "{{year}}-{{month}}-{{day}}_{{slug}}"
    fields:
      - { label: "Title", name: "title", widget: "string", hint: 'Student Achievement Conferences' }
      - { label: "Emergency", name: "is_emergency", widget: "boolean", default: false }
      - { label: "Date", name: "date", widget: "datetime" }
      - { label: "Subtitle", name: "subtitle", widget: "string", required: false, hint: 'Students released at 1.50pm (end of Period 4)' }
      - { label: "Body", name: "body", widget: "markdown" }
      - { label: "Image Filename", name: "image", widget: "image", required: false }
      - { label: "Tags", name: "tags", widget: "list", required: false }      
erezrokah commented 4 years ago

@wing5wong, sorry to hear you're still experiencing issues. The limit is tied not to a specific user of the CMS, but to the account token configured under git-gateway settings in Netlify. Creating a separate GitHub account dedicated to the CMS might help to diagnose as we can verify that the only consumer of the token (hence contributing to reaching the limit) is the CMS.

This is around double the actual files in the folder

Seeing double the amount in cache is expected as we cache both the file content, and some meta data for the file (when it was last accessed and the author).

It would be helpful to share the network traffic from the user, so we can see which requests are sent to the API. When capturing the traffic, make sure the Disable Cache option is not checked.

wing5wong commented 4 years ago

The limit is tied not to a specific user of the CMS, but to the account token configured under git-gateway settings in Netlify. Creating a separate GitHub account dedicated to the CMS might help to diagnose as we can verify that the only consumer of the token (hence contributing to reaching the limit) is the CMS.

Does this require adding paid users to my team or can I create the account with access to my repo and just use an access token generated directly on github? (independent of my netlify sign in through github - clicking "Generate access token in GitHub" appears to directly use my current credentials to generate this token)

Seeing double the amount in cache is expected as we cache both the file content, and some meta data for the file (when it was last accessed and the author).

OK, that's what I thought was the case

It would be helpful to share the network traffic from the user, so we can see which requests are sent to the API. When capturing the traffic, make sure the Disable Cache option is not checked.

I will try get this done today depending on availability.

erezrokah commented 4 years ago

Does this require adding paid users to my team or can I create the account with access to my repo and just use an access token generated directly on github?

Any account with write access to the repo should work by generating the token from https://github.com/settings/tokens/new

wing5wong commented 4 years ago

Hi @erezrokah Sorry for delays here. as usual life gets in the way.

I havent tried the new token just yet, but as a point of reference I was with our maintainer yesterday after she had been rate limited earlier in the day - then from a fresh start, she tried to edit an article.

It asked her if she wanted to restore a local backup (presumably because she was rate limited previously, and closed the page)

Then there are requests for 2500+ items image

Then we refreshed the page.

Then there is a similar number of items, before hitting the rate limit and seeing the dreaded red request/responses (not visible in this image)

Is the CMS meant to reload all items when editing an article? Is there a way to tell if these items are retrieved from cache? I have just reproduced this issue myself this morning following the same process - now rate limited for an hour.

Our news folder currently: image

erezrokah commented 4 years ago

Re-opening this so we can track this better

wing5wong commented 4 years ago

Thanks.

I have created a new users and invited them as a collaborator to this repository. I have generated an access token for that user and assigned it in the netlify git-gateway settings. I have tested some updates to ensure our content manager can still post updates.

Will advise if any further timeouts

wing5wong commented 4 years ago

Open admin page > click News category image

Select Edit 1 new item image

I refreshed the edit screen, and unfortunately chrome dev tools crashed.

Closing and reopening devtools reveals image

wing5wong commented 4 years ago

still ongoing issues around this -editor today has made some posts 5 hours ago, then when trying to create a new article is rate limited before even submitting the article.

What else can be changed regarding this? we have already utilised the new API key. This is the same user every time using the site, so content should be cached correctly, meaning we don't run into this rate limiting beyond her first usage warming up the cache data

image

wing5wong commented 4 years ago

We continue to have this issue despite recreating tokens several times now. Recreating the token allows access for a short time, then we receive API timeouts again.

Something must be going on here and either cached data is not retrieved correctly, or hits against cached data are still counted against the API limit.

What other explanation can there be for this behaviour @erezrokah ?

Just yesterday i recreated an access token, our content manager could continue working and this morning after making just a couple of file update, she is rate limited This is slowly whittling away at our content managers sanity!

erezrokah commented 4 years ago

Sorry for the lack of response here @wing5wong. Trying to map out places we are reading many entries:

  1. Sorting/Filtering
  2. i18n
  3. Nested collections
  4. Relation widgets
  5. First load of editorial workflow (will load all drafts in the background) - see https://github.com/netlify/netlify-cms/issues/3468

Maybe that will help us focus on what's triggering the limit.

Something must be going on here and either cached data is not retrieved correctly, or hits against cached data are still counted against the API limit.

You could observe caching behaviour using the browser network tab. image

Blobs should always be retrieved from the cache after initial load. We are forcing those here https://github.com/netlify/netlify-cms/blob/519cb2d4c2db729d2643c9116f93656b6a9dba23/packages/netlify-cms-backend-github/src/API.ts#L643

wing5wong commented 4 years ago

Sorry for the lack of response here @wing5wong. Trying to map out places we are reading many entries:

No worries, i appreciate i am just one person and so are you. happy to continue working to identify the issue here as time permits.

  1. Sorting/Filtering

We've disabled sorting since we first encountered this so i think this is unlikely image

  1. i18n

I don't believe we are using this unless it is applied automatically

  1. Nested collections

Again i dont think we are using this feature.

  1. Relation widgets

Our news collection has 4 relation widgets, so this is a possibility

  1. First load of editorial workflow (will load all drafts in the background) - see #3468

We are not using editorial workflow

You could observe caching behaviour using the browser network tab. image

Blobs should always be retrieved from the cache after initial load. We are forcing those here

https://github.com/netlify/netlify-cms/blob/519cb2d4c2db729d2643c9116f93656b6a9dba23/packages/netlify-cms-backend-github/src/API.ts#L643

It really seems like this is not happening. I opened our events page which has only a small number of items ( so i dont get locked out!), then closed the browser. Reopening the browser and navigating to the events collection again, as well as refreshing the page, shows the data downloaded again image

erezrokah commented 4 years ago

Thanks @wing5wong. This is very strange indeed. Maybe we're missing some basics here:

  1. Making sure the CMS version is the latest (netlify-cms@2.10.67 or netlify-cms-app@2.13.2).
  2. Trying with a different browser (I know this has been happening to different users so chances are slim here, but just in case).
  3. Trying from a different network connection.
  4. Creating a new Netlify site just for the sake of debugging this.
  5. Using github backend (like I suggested) just for the sake of debugging this (seeing if the requests to blobs are forced cached).
wing5wong commented 4 years ago

Hi @erezrokah

Thanks for that, i have started testing those with some interesting results.

  1. Making sure the CMS version is the latest (netlify-cms@2.10.67 or netlify-cms-app@2.13.2).

i use https://unpkg.com/netlify-cms@^2.0.0/dist/netlify-cms.js as my script url, which at this stage is linking to https://unpkg.com/netlify-cms@2.10.67/dist/netlify-cms.js

  1. Trying with a different browser (I know this has been happening to different users so chances are slim here, but just in case).

Now heres where it gets interesting.... Firefox successfully returns cached data! image

image

image

image

  1. Trying from a different network connection.

Il be able to try this tonight from home

  • Creating a new Netlify site just for the sake of debugging this.
  • Using github backend (like I suggested) just for the sake of debugging this (seeing if the requests to blobs are forced cached).

I can test these but as these would be most disruptive at this stage id prefer to wait.

With the Are we able to confirm an issue with chrome caching at all? I do notice if i switch between work and personal chrome accounts that the "initiator" in the work account is "unsentRequest.js:41" and in my personal account is "VM484:1" . regardless, both of these do not appear to load a cached response.

erezrokah commented 4 years ago

Now heres where it gets interesting.... Firefox successfully returns cached data!

This is great news. At least we have a path forward.

I think one can control the caching behaviour on Chrome using CLI flags. Can you verify neither one of --disk-cache-dir,--disk-cache-size,--media-cache-size is set when launching Chrome (if they are set it will probably be reflected in the Windows shortcut).

wing5wong commented 4 years ago

I think one can control the caching behaviour on Chrome using CLI flags. Can you verify neither one of --disk-cache-dir,--disk-cache-size,--media-cache-size is set when launching Chrome (if they are set it will probably be reflected in the Windows shortcut).

Ive checked everywhere i can think regarding this - Shortcut, chrome flags, gsuite admin - either no mention of the flag, or the settings remain default (unconfigured) - except the disabled AppCache (this is disabled by default by gsuite). I dont think the caching is configured to use this though, and using indexedDB rather. Perhaps this is it?

image

wing5wong commented 4 years ago

Have tested this on a new network now and it seems the caching is functioning as expected here.

My assumption now is that somewhere along the line our work ISP is affecting the caching

erezrokah commented 4 years ago

Have tested this on a new network now and it seems the caching is functioning as expected here.

My assumption now is that somewhere along the line our work ISP is affecting the caching

This is very odd, especially considering it works with Firefox. Thank you for the update. The only mechanism I can think of that could cause this is the work network injecting scripts into the traffic changing the browser fetch implementation.

I'm not sure what else can be done on the CMS side

erezrokah commented 4 years ago

Closing this issue per my last comment

wing5wong commented 4 years ago

Thanks.

I appreciate your time in this and still haven’t managed to track exactly what is causing this but agree there nothing else we can do.

Regards, Sean Anderson

On 26/11/2020, at 11:16 AM, Erez Rokah notifications@github.com wrote:



Closing this issue per my last comment

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/netlify/netlify-cms/issues/4097#issuecomment-733969815, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABBT5UJ7DZAO2ASRUFU5EGDSRV63JANCNFSM4PPLWTQQ.