git.iko.soy/typeable/bloodhound
on master help sign in
Merge branch 'master' of github.com:bitemyapp/bloodhound
9c4fc5dChris Allen
src/Database/Bloodhound/Client.hs+14
@@ -31,6 +31,7 @@ module Database.Bloodhound.Client
31 , indexExists
31 , indexExists
32 , openIndex
32 , openIndex
33 , closeIndex
33 , closeIndex
34+ , listIndices
34 , updateIndexAliases
35 , updateIndexAliases
35 , getIndexAliases
36 , getIndexAliases
36 , putTemplate
37 , putTemplate
@@ -430,6 +431,19 @@ openIndex = openOrCloseIndexes OpenIndex
430closeIndex :: MonadBH m => IndexName -> m Reply
431closeIndex :: MonadBH m => IndexName -> m Reply
431closeIndex = openOrCloseIndexes CloseIndex
432closeIndex = openOrCloseIndexes CloseIndex
432
433
434+-- | 'listIndices' returns a list of all index names on a given 'Server'
435+listIndices :: (MonadThrow m, MonadBH m) => m [IndexName]
436+listIndices =
437+ parse . responseBody =<< get =<< url
438+ where
439+ url = joinPath ["_cat/indices?v"]
440+ -- parses the tabular format the indices api provides
441+ parse body = case T.lines (T.decodeUtf8 (L.toStrict body)) of
442+ (hdr:rows) -> let ks = T.words hdr
443+ keyedRows = [ HM.fromList (zip ks (T.words row)) | row <- rows ]
444+ names = catMaybes (HM.lookup "index" <$> keyedRows)
445+ in return (IndexName <$> names)
446+ [] -> throwM (EsProtocolException body)
433
447
434-- | 'updateIndexAliases' updates the server's index alias
448-- | 'updateIndexAliases' updates the server's index alias
435-- table. Operations are atomic. Explained in further detail at
449-- table. Operations are atomic. Explained in further detail at
tests/tests.hs+6
@@ -1426,6 +1426,12 @@ main = hspec $ do
1426 L.find ((== alias) . indexAliasSummaryAlias) summs `shouldBe` Just expected
1426 L.find ((== alias) . indexAliasSummaryAlias) summs `shouldBe` Just expected
1427 Left e -> expectationFailure ("Expected an IndexAliasesSummary but got " <> show e)) `finally` cleanup
1427 Left e -> expectationFailure ("Expected an IndexAliasesSummary but got " <> show e)) `finally` cleanup
1428
1428
1429+ describe "Index Listing" $ do
1430+ it "returns a list of index names" $ withTestEnv $ do
1431+ _ <- createExampleIndex
1432+ ixns <- listIndices
1433+ liftIO (ixns `shouldContain` [testIndex])
1434+
1429 describe "Index Settings" $ do
1435 describe "Index Settings" $ do
1430 it "persists settings" $ withTestEnv $ do
1436 it "persists settings" $ withTestEnv $ do
1431 _ <- deleteExampleIndex
1437 _ <- deleteExampleIndex