Skip to content
Snippets Groups Projects
This project is mirrored from https://github.com/metabase/metabase. Pull mirroring updated .
  1. Sep 20, 2022
  2. Sep 19, 2022
    • dpsutton's avatar
      Don't use persisted model tables for segmented users (#25347) · 32403f0d
      dpsutton authored
      * Don't use persisted model tables for segmented users
      
      This actually isn't a bug, but due to very subtle and arbitrary reasons.
      
      For background about why we need to ensure this never happens, we cannot
      use persisted models when sandboxing is at play. A simple example is as
      follows: make a model on a products table that does not select the
      category. Have a sandbox on category such that someone can only see
      products of category "Gizmo". the model lacks the category column but we
      insert a where clause that still works. When the model is persisted,
      there is no category column in the underlying table so sandboxing cannot
      possibly work: the data necessary to filter is no longer associated with
      the rest of the data in the model.
      
      The fix for this is quite simple: in
      `metabase.query-processor.middleware.fetch-source-query` we only splice
      in the persisted query if the user is not a segmented user (product name
      for sandboxing).
      
      ```clojure
      (and persisted-info/*allow-persisted-substitution*
           (not (segmented-user?))  ;; <----- new check
           (:active card)
           (:definition card)
           (:query_hash card)
           (= (:query_hash card) (persisted-info/query-hash (:dataset_query card)))
           (= (:definition card) (persisted-info/metadata->definition (:result_metadata card)
                                                                      (:table_name card)))
           (= (:state card) "persisted"))
      ```
      
      Technical details about why this bug did not manifest
      
      When swapping out a card__<id> to a source query, if its a model we will
      see if it is persisted, and if so, we will use the native sql to select
      from the persisted table. It does this by adding the native sql at a key
      called `:persisted-info/native` and a middleware
      `#'qp.persistence/substitute-persisted-query` walks the query replacing
      the query with the native:
      
      ```clojure
      ;; metabase.query-processor.middleware.persistence
      
          (mbql.u/replace query
            (x :guard (every-pred map? :persisted-info/native))
            {:native (:persisted-info/native x)})
      ```
      
      There is also a middleware that walks through the query looking for
      tables with gtaps on them and replacing them. By change, the sandboxing
      middleware runs immediately before the substitute-persisted middleware!
      
      ```clojure
         ;; literally the previous middleware
         (resolve 'ee.sandbox.rows/apply-sandboxing)
         #'qp.persistence/substitute-persisted-query
      ```
      
      If you swap the order of these two sandboxing is broken. As is, it
      "works" but not by design, just by happenstance. The sandboxing
      middleware just did not know that the `:persisted-info/native` key meant
      that a native query was to be substituted. In the reverse order, the
      native query is already substituted and there is no change for the
      sandboxing to occur.
      
      The obvious fix is to ensure that we never even attempt to use the
      persisted tables and that is what this PR does.
      
      * Eastwood doesn't like shadowing like this
      
      * Rearrange check order for tests
      
      `segmented-user?` throws if there is no bound user. A test in
      `fetch-source-query-test` was failing because there was no user bound,
      but it wasn't attempting to swap out a persisted table, it just didn't
      expect to need a user.
      
      Moving it lower lets it short circuit on other bits that are bound to
      fail (definition, query_hash, etc) requiring persistence before we check
      for a bound user
      32403f0d
    • Noah Moss's avatar
      LDAP setup improvements (#25421) · b18d53e8
      Noah Moss authored
      
      * first pass at LDAP setup improvements
      
      * fix lint errors
      
      * fix LDAP api tests
      
      * WIP test for new setting setter
      
      * fix setting test
      
      * set ldap-enabled to true in ldap server macro
      
      * try to fix java11 tests
      
      * Update src/metabase/integrations/ldap.clj
      
      Co-authored-by: default avatarmetamben <103100869+metamben@users.noreply.github.com>
      
      * add transaction
      
      * remove ldap-ever-enabled? setting and revert some of the logic that is no longer necessary
      
      * set ldap-enabled via the ldap api and add tests
      
      * fix tests and lint
      
      * fix error on settings save
      
      * fix cypress test
      
      * actually fix cypress
      
      Co-authored-by: default avatarmetamben <103100869+metamben@users.noreply.github.com>
      b18d53e8
    • Alexander Polyankin's avatar
      b7ee73f4
    • dpsutton's avatar
      initial prometheus sketch (#25149) · 00530c98
      dpsutton authored
      * initial prometheus sketch
      
      need env variable to start: MB_PROMETHEUS_SERVER_PORT=9191
      
      sample of output:
      
      ```
      '# HELP jvm_threads_current Current thread count of a JVM
      '# TYPE jvm_threads_current gauge
      jvm_threads_current 81.0
      '# HELP jvm_threads_daemon Daemon thread count of a JVM
      '# TYPE jvm_threads_daemon gauge
      jvm_threads_daemon 36.0
      '# HELP jvm_threads_peak Peak thread count of a JVM
      '# TYPE jvm_threads_peak gauge
      jvm_threads_peak 81.0
      '# HELP jvm_threads_started_total Started thread count of a JVM
      '# TYPE jvm_threads_started_total counter
      jvm_threads_started_total 104.0
      '# HELP jvm_threads_deadlocked Cycles of JVM-threads that are in deadlock waiting to acquire object monitors or ownable synchronizers
      '# TYPE jvm_threads_deadlocked gauge
      jvm_threads_deadlocked 0.0
      ```
      
      request:
      
      ```
      ❯ http localhost:9191/metrics
      HTTP/1.1 200 OK
      Content-Length: 7329
      Content-Type: text/plain; version=0.0.4; charset=utf-8
      Date: Wed, 31 Aug 2022 16:13:38 GMT
      Server: Jetty(9.4.48.v20220622)
      
      '# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
      '# TYPE jvm_gc_collection_seconds summary
      jvm_gc_collection_seconds_count{gc="G1 Young Generation",} 41.0
      jvm_gc_collection_seconds_sum{gc="G1 Young Generation",} 0.586
      jvm_gc_collection_seconds_count{gc="G1 Old Generation",} 0.0
      jvm_gc_collection_seconds_sum{gc="G1 Old Generation",} 0.0
      '# HELP jvm_threads_current Current thread count of a JVM
      '# TYPE jvm_threads_current gauge
      ```
      
      * Log on unparseable prometheus port
      
      * Clean up prometheus and save test
      
      * typehint
      
      * Jetty collector
      
      * Reset system to nil when shutting down
      
      * c3p0 stats
      
      * Clean up, document, and add tests
      
      * Error message for failure to bind to port
      
      Starting up with prometheus port set to the main webserver port to get
      the error:
      
      ```
      MB_JETTY_PORT=3006 MB_DB_CONNECTION_URI="postgres://..." \
      MB_PROMETHEUS_SERVER_PORT=3006 java -jar locally-built.jar
      ```
      yields the following error:
      
      ```shell
      2022-09-09 10:08:52,000 INFO metabase.core :: Setting up prometheus metrics
      2022-09-09 10:08:52,002 INFO metabase.prometheus :: Starting prometheus metrics collector
      2022-09-09 10:08:52,016 INFO metabase.prometheus :: Starting prometheus metrics web-server on port 3,006
      2022-09-09 10:08:52,036 ERROR metabase.core :: Metabase Initialization FAILED
      clojure.lang.ExceptionInfo: Failed to initialized Prometheus on port 3,006 {:port 3006}
      [stacktrace ...]
      Caused by: java.io.IOException: Failed to bind to 0.0.0.0/0.0.0.0:3006
      [stacktrace ...]
      Caused by: java.net.BindException: Address already in use
      ```
      
      * Test for error message
      
      * Move prometheus to analytics folder
      
      * Str port so log does not add commas to number
      
      eg:
      > Starting prometheus metrics web-server on port 9,191
      
      * make some test functions private
      
      * docstring on defsetting
      
      * align lets
      
      * ns docstring changes
      
      include the env variable for ease of understanding
      
      * sort ns
      
      * remove some reflection warnings
      
      * reorder FE lines due to some new linter
      
      * Cleanup: i18n descriptions, typo, List/of
      
      * bit more concise c3p0 collection
      
      * no longer need the helper `->array`
      
      * clean up doseq for c3p0 measurements
      00530c98
    • Mahatthana (Kelvin) Nomsawadi's avatar
      Make table column width reasonable (#25436) · d6bb49fd
      Mahatthana (Kelvin) Nomsawadi authored
      * Make table column width reasonable
      
      Truncate column name that is longer than 16 characters
      
      * Add a test to check header truncation of tables
      
      Also adjusted the shape of the header fn's return data a bit -> the `[:th ... ]` vectors aren't wrapped in a seq anymore.
      
      * Fix wrong max column character length :face_palm:
      
      
      
      * Update static viz table style
      
      * Address PR comment, simplifying the code
      
      Co-authored-by: default avatarAdam James <adam.vermeer2@gmail.com>
      d6bb49fd
  3. Sep 16, 2022
    • Cal Herries's avatar
      Use slugs for card template tags in the native query editor + autocomplete (#25319) · 2c7178ea
      Cal Herries authored
      * Allow slugs in question template tags, like `{{#123-a-question}}`
      
      * Update CardTagEditor to add slug names to the query text, instead of IDs
      
      * Fix dispatchApiErrorEvent prop for entity object loader
      
      * Ignore errors loading names of referenced questions
      
      * Fix e2e tests
      
      * Implement autocomplete for model slugs
      
      * Prioritize models above questions
      
      * Make the ace_autocomplete popup slightly wider to account for longer question names
      
      * Reorder requires
      
      * Remove unnecessary ? from endpoint string
      
      * Add e2e test for card tag autocomplete
      
      * Fix NativeQueryEditor not swapping back to standard completers
      
      * Refactor replaceCardSlug
      
      * Add e2e test for updating tags when card name is changed
      
      * Refactor updateReferencedQuestionNames
      
      * Add slug method to Question class
      
      * Use map for autocomplete API results
      
      * Rename endpoint path
      
      * Rename for consistency
      
      * Add docstrings
      
      * Update slug() to guard against undefined names
      
      * Fix read permissions for the endpoint
      
      * Add backend test
      
      * Fix unit tests
      
      * Fix permissions error
      
      * Make regex simpler
      
      * Undo change of value on QuestionPicker
      
      * Fix tests
      
      * Fix models e2e test
      
      * Simplify updateReferencedQuestionNames
      
      * Fix bugs in updateReferencedQuestionNames
      
      * Rename variable
      
      * Move NativeQuery methods to new native-query utils module
      
      * Fix typescript errors
      
      * Fix e2e tests
      
      * Fix e2e test
      
      * Fix BE tests
      
      * Actually fix BE test
      
      * Refactor updateQuestionTagNames
      
      * Align comments
      
      * Reorder autocomplete results
      
      * Refactor: move all query text tag utils in one place
      
      * Add tests for regex
      
      * Add unit tests for cardIdFromTagName
      
      * Add schema to autocomplete_suggestions endpoints
      
      * Add perms checks to autocomplete tests
      
      * Add unit test for updateCardTagNames
      
      * Rename updateQuestionTagNames -> updateCardTagNames
      
      * Tidy card-autocomplete-suggestions-test
      
      * Rename questionReference-> cardTag for consistency
      
      * Rename card-reference -> card-tag for consistency
      
      * Use ternary operator for comprehension
      
      * Fix broken swapCompleters
      
      * Use prefix match on name for 123-foo case
      2c7178ea
    • Ryan Laurie's avatar
      Action Creator 8: Required Fields and Default Values (#25445) · 56791a6c
      Ryan Laurie authored
      * add support for required fields and default values in action forms
      
      * handle missing settings better
      
      * save default numbers as numbers
      56791a6c
    • Natalie's avatar
      docs - update full-app embedding (#25426) · 822ae735
      Natalie authored
      822ae735
    • Jeff Bruemmer's avatar
      remove tables of contents (#25466) · 63d72010
      Jeff Bruemmer authored
      63d72010
    • Natalie's avatar
      docs - update "manage database" permission · 450c308a
      Natalie authored
      450c308a
    • Maz Ameli's avatar
      change dataset to model (#25448) · 0ae41438
      Maz Ameli authored
      0ae41438
    • Dalton's avatar
      Preserve Model metadata when changing the Model's query (#25442) · a11e9d77
      Dalton authored
      * Preserve model column metadata in the QUERY_COMPLETED action
      
      * Update metadata everywhere in redux
      
      * Unskip repro
      
      * Tweak isSameField default to get rid of some dup code
      a11e9d77
    • Dalton's avatar
      Fix Visualization component handling of mode prop (#25438) · 500d407c
      Dalton authored
      * Fix Visualization component handling of mode prop
      
      * Pass mode prop in and give it a gross name
      500d407c
    • Alexander Polyankin's avatar
    • Alexander Polyankin's avatar
    • Aleksandr Lesnenko's avatar
      remove unused static chart types (#25440) · bac8ab35
      Aleksandr Lesnenko authored
      * remove unused static chart types
      
      * add visual tests for single series charts
      bac8ab35
  4. Sep 15, 2022
    • Gustavo Saiani's avatar
    • Nick Fitzpatrick's avatar
      52735311
    • Ryan Laurie's avatar
      Action Creator 7: Customize Placeholder text (#25407) · c1cb7f38
      Ryan Laurie authored
      * support field placeholder customization
      
      * update tests
      c1cb7f38
    • metamben's avatar
      Add helper function sending debug-qp events to portal (#25423) · 5fc9133f
      metamben authored
      * Add helper function sending debug-qp events to portal
      * Include the intended value in the transformed-result event
      5fc9133f
    • Jeff Bruemmer's avatar
      docs - community drivers (#25435) · 6c87a82f
      Jeff Bruemmer authored
      6c87a82f
    • Howon Lee's avatar
      Coerce all the static viz charts that could be a combo to be a combo (#24696) · abca737f
      Howon Lee authored
      
      * thinking
      
      * killing it
      
      * lab image bundle for lines proper
      
      * linter shutting up
      
      * get rid of viz-settings binding at all
      
      * Remove accidentally re-added categorical-area
      
      * Merged master, and temporarily comment out some tests
      
      * Simplify conditional for detecting chart type
      
      * Remove a few old fns/symbols
      
      * Clean up the detect-chart a bit
      
      * Remove sparkline. It's an old concept that's not used
      
      We can acheive similar results with :line directly. If we care about a trend, we can use a :smartscalar.
      
      * Fix up tests that now also use combo charts
      
      * Missed a key change for area test
      
      * Get rid of deprecated sparkline stuff
      
      * Remove commented out sparkline tests
      
      * Delete this function. I was using it in the REPL, it's not needed
      
      Co-authored-by: default avatarAdam James <adam.vermeer2@gmail.com>
      abca737f
    • Benoit Vinay's avatar
      Convert Variable to TypeScript (#23560) · 3925f1b4
      Benoit Vinay authored
      * Move Variable in its own package
      
      * TemplateTagVariable package created
      
      * memoizeClass return type
      
      * Renaming Query to QueryInner to follow standards
      
      * Constants added to TemplateTagVariable
      
      * Fixed Query typing
      
      * Misc
      3925f1b4
    • Ryan Laurie's avatar
      add simple dev actions page (#25434) · 26d869d1
      Ryan Laurie authored
      26d869d1
    • Braden Shepherdson's avatar
      Serdes v2: Fix a missing case in the deps for a Card (#25392) · 077d8e36
      Braden Shepherdson authored
      Cards can depend on other Cards as their `:source-table`, but the code
      to extract `serdes-dependencies` from the MBQL query did not
      capture that case.
      077d8e36
    • Braden Shepherdson's avatar
      Serdes v2: Handle missing User refs by synthesizing dummy users (#25391) · f2981efc
      Braden Shepherdson authored
      Many entities have `creator_id` and similar fields. `User`s are not
      serialized. Foreign keys to users are serialized as email addresses.
      
      During deserialization in a different instance (eg. a local dev instance
      importing a dump from a prod instance) many such users may not exist.
      This change creates new `User` entities on the fly with empty names,
      generated passwords, and the email set.
      f2981efc
    • Anton Kulyk's avatar
      Respect data app nav items (#25416) · 7667c334
      Anton Kulyk authored
      * Allow overwriting `SidebarLink` name styles
      
      * Add `DataAppPageSidebarLink` component
      
      * Render data app sidebar page tree
      
      * Hide pages marked as hidden
      
      * Add `getParentDataAppPageId` helper
      
      * Highlight parent page when hidden page is selected
      
      * Extract `getSelectedItems` and add tests
      
      * Fix messed up ordering bug
      7667c334
    • Anton Kulyk's avatar
      Implement scaffolding new pages for existing apps (#25402) · 54afeea9
      Anton Kulyk authored
      * Remove `DataAppNewButton`
      
      * Add new item menu
      
      * Fix missing click handler
      
      * Use "pencil" icon for new page
      
      * Fix action buttons look
      
      * Extract `DataAppDataPicker` component
      
      * Rename `scaffold` action
      
      * Add `scaffoldNewPages` action
      
      * Add `ScaffoldDataAppPagesModal` component
      
      * Add `DataAppNavItem` type
      
      * Allow building page URLs out of nav items
      
      * Implement "Add data" flow
      54afeea9
    • Anton Kulyk's avatar
      Implement implicit actions for data apps (#25393) · f4d2f588
      Anton Kulyk authored
      * Add implicit action click behavior types
      
      * Add `isImplicitActionButton` helper
      
      * Extract `ActionButtonView` component
      
      * Separate implicit and default action buttons
      
      * Use `DashboardOrderedCard` instead of `DashCard`
      
      * Use `Value` type for PK argument
      
      * Fix type error
      
      * Extract `ImplicitActionClickBehavior` type
      
      * Add `ImplicitInsertModal`
      
      * Add `DashCardDataMap` type
      
      * Add dashboard selectors for implicit update/delete
      
      * Add `ImplicitUpdateModal`
      
      * Add `ImplicitDeleteModal`
      
      * Validate implicit actions in `clickBehaviorIsValid`
      
      * Reload page on action instead of a single dash card
      
      * Tweak successful insert toast message
      
      * Fix eslint error
      f4d2f588
  5. Sep 14, 2022
Loading